已合并
【PR】: 简要描述 refactor es docs #25
GengChao创建于 2025年12月29日
【PR】: 简要描述 refactor es docs #25
已合并
GengChao创建于 2025年12月29日
19 个文件变更+2241-73
Adocs/es/README.md+72-0文件内容审核中,请稍后刷新重试
Rdocs/es/eager_style_graph_builder.mddocs/es/api/es_cpp.md+14-24
@@ -93,10 +93,10 @@ graph TB
93**功能**: 张量持有者类,封装了张量的各种操作93**功能**: 张量持有者类,封装了张量的各种操作
94 94 
95**主要方法**:95**主要方法**:
96-- 算术运算: `operator+`, `operator-`, `operator*`, `operator/`96+- 算术运算`operator+`, `operator-`, `operator*`, `operator/`
97-- 属性设置: `SetDataType()`, `SetFormat()`, `SetShape()`97+- 属性设置`SetDataType()`, `SetFormat()`, `SetShape()`
98-- 属性管理: `SetAttr()`, `SetAttrForNode()`98+- 属性管理`SetAttr()`, `SetAttrForNode()`
99-- 访问器: `GetCTensorHolder()`, `GetProducer()`99+- 访问器`GetCTensorHolder()`, `GetProducer()`
100 100 
101**关系**:101**关系**:
102 102 
@@ -108,7 +108,7 @@ graph TB
108 108 
109**文件位置**: `cpp/es_tensor_like.h`109**文件位置**: `cpp/es_tensor_like.h`
110 110 
111-**功能**: 类Tensor类型定义,用于将EsTensorHolder、标量和向量转为EsTensorHolder对象111+**功能** Tensor 类型定义,用于将 EsTensorHolder、标量和向量转为 EsTensorHolder 对象
112 112 
113**主要方法**:113**主要方法**:
114- `ToTensorHolder()` - 转为EsTensorHolder对象114- `ToTensorHolder()` - 转为EsTensorHolder对象
@@ -140,28 +140,18 @@ graph TB
140 140 
141**文件位置**: `c/esb_funcs.h`141**文件位置**: `c/esb_funcs.h`
142 142 
143-**功能**: 提供底层的C语言接口143+**功能**提供底层的 C 语言接口
144 144 
145**主要函数类别**:145**主要函数类别**:
146-- 图构建器管理: `EsCreateGraphBuilder()`, `EsDestroyGraphBuilder()`146+- 图构建器管理`EsCreateGraphBuilder()`, `EsDestroyGraphBuilder()`
147-- 输入创建: `EsCreateGraphInput()`, `EsCreateGraphInputWithDetails()`147+- 输入创建`EsCreateGraphInput()`, `EsCreateGraphInputWithDetails()`
148-- 常量创建: `EsCreateScalar*()`, `EsCreateVector*()`, `EsCreateConst*()`148+- 常量创建`EsCreateScalar*()`, `EsCreateVector*()`, `EsCreateConst*()`
149-- 属性设置: `EsSet*AttrForGraph()`, `EsSet*AttrForTensor()`, `EsSet*AttrForNode()`149+- 属性设置`EsSet*AttrForGraph()`, `EsSet*AttrForTensor()`, `EsSet*AttrForNode()`
150- 输出设置:`EsSetGraphOutput()`150- 输出设置:`EsSetGraphOutput()`
151-- 图构建: `EsBuildGraphAndReset()`, 151+- 图构建`EsBuildGraphAndReset()`
152 152 
153### 使用示例153### 使用示例
154-```c++154+参考[sample](../../../examples/es)
155-namespace ge {
156-namespace es {
157-std::unique_ptr<ge::Graph> MakeReluAddGraphByEs() {
158- auto graph_builder = std::make_unique<EsGraphBuilder>("MakeReluAddGraph");
159- auto input = graph_builder->CreateInput(0, "input", ge::DT_FLOAT, ge::FORMAT_ND, {2, 3});
160- auto relu2 = Relu(Relu(input));
161- (void) graph_builder->SetOutput(Add(input, relu2), 0);
162- auto graph = graph_builder->BuildAndReset();
163- return graph;
164-}
165-}
166-}
167```155```
156+ 
157+ 
Rdocs/es/ge_py.mddocs/es/api/ge_python.md+15-11文件内容审核中,请稍后刷新重试
@@ -0,0 +1,1992 @@
1+# ES (Eager Style) 构图
2+ 
3+## 需求概述
4+ 
5+现阶段构图接口示例:
6+ 
7+```C++
8+std::unique_ptr<ge::Graph> BuildAddGraph() {
9+ auto graph = std::make_unique<ge::Graph>("graph");
10+ auto data0 = op::Data("data0").set_attr_index(0);
11+ auto data1 = op::Data("data1").set_attr_index(1);
12+ auto add = op::Add("add").set_input_x1(data0).set_input_x2(data1);
13+ graph->SetInputs({data0, data1}).SetOutputs({add});
14+ return graph;
15+}
16+```
17+ 
18+现阶段构图接口优点:
19+ 
20+1. 点、边分离的构图方法,构图方式灵活、功能强大
21+ 
22+现阶段构图接口痛点:
23+ 
24+1. 使用繁琐,基于原型将 IR 实例化,然后对应原型的定义设置输入输出、属性等
25+2. 犯错不易察觉,需要真正开始编译图的时候可能才能发现构图的错误
26+3. C++接口,无ABI兼容性保证
27+4. 无前后向兼容设计
28+ 
29+构图接口业界现状:
30+ 
31+1. 大部分的构图风格采用函数式(函数式构图通过函数调用直接表达节点间的连接关系)
32+2. 函数式相对点边分离的优点:简单、C++编译时报错
33+3. 函数式相对点边分离的缺点:不灵活,必须按照拓扑序顺序构图;功能较弱,没有节点概念,构图、改图接口无法归一
34+ 
35+关于两种风格的结论:
36+ 
37+1. 纯构图场景适合函数式,简单、鲁棒性好
38+2. 综合场景(构图、改图、遍历图)使用点边分离方式
39+ 
40+ES 目标:
41+ 
42+1. 面向构图场景,采用函数式风格,提供易用接口
43+2. 由IR定义直接生成,避免手写,减少工作量
44+3. 支持多语言,支持Python、C++、C三种语言
45+4. API、ABI兼容
46+5. 向后、向前兼容
47+ 
48+## 整体设计
49+ 
50+**ES (Eager Style)** 是一套**函数风格的构图 API**。其语法设计借鉴了 PyTorch Eager 模式的脚本风格,因此得名。其核心理念是通过函数调用直接表达节点间的连边关系和 IR 信息传递。
51+ 
52+构图整体数据流程如下所示:
53+ 
54+![](figures/data_flow.svg)
55+ 
56+构造可用的 `GE` 图整体分为两个阶段:
57+ 
58+1. **构图阶段**:根据用户 `APP` 所依赖的 `OPP` 版本完成图构建,得到初始图,称为“用户直构图”。
59+2. **`IR` 语义兼容性处理阶段**:当运行环境中的 `OPP` 版本与构图时所用版本不一致时,进入该阶段。系统会基于构图时 `IR`
60+ 版本,对"用户直构图"的语义进行解析,并尝试调整为符合运行环境能力的"兼容图"。若由于语义缺失或超出当前环境支持范围等原因,导致无法完成兼容转换,则返回错误并终止执行。
61+ 
62+逻辑上,基于 `Operator` 系列构图 `API`,向上封装的构图 `lib`
63+ 
64+<img src="figures/logical.svg" style="zoom:80%;" />
65+ 
66+`es``C` 语言实现为核心,向上封装为 `C++``Python` 接口。其中,共用能力(如兼容性保障与公共函数)集中在 `C Builder` 层实现,而 `C++``Python`
67+层则根据各自语言特性进行语法封装。
68+ 
69+整套构图接口采用函数式风格,覆盖当前所有的 `GEIR` 定义(不包括 `AscendCIR`)。严格来说,`GEIR` 并非一个独立概念,但由于 `AscendIR` 的部分内容(如 `AscendCIR`
70+)超出了本设计范围,后文中“GEIR”一词特指排除 `AscendCIR` 后的 `AscendIR` 子集。
71+ 
72+为降低维护成本,接口采用自动生成机制:基于 `GEIR` 定义、辅以少量人工标注,结合统一的构图 API 规范,自动生成完整的 `es` 函数式构图接口,并打包到 `opp` 算子包对外发布。
73+ 
74+![](figures/esb_publish.svg)
75+ 
76+ 
77+## `API/ABI`兼容性设计
78+ 
79+向前、向后兼容是 `CANN` 对外 `API` 的基本规格,`esb` 定位为构图系列 `API`,兼容性设计尤为重要,因此将兼容性设计作为首要考虑因素。
80+ 
81+### 前后向兼容性场景分析
82+ 
83+根据`CANN`兼容性要求,一个运行环境上,最多会出现四个`CANN`版本:
84+ 
85+1. `GE`包版本:包含`GE`业务(图编译、图执行)、基础数据结构(`metadef`)两部分,`3, 4, 6`
86+2. `opp`包版本:包含算子包,`8`
87+3. 用户`APP`构建时,使用的`GE`包版本:用户`APP` 构建时,构建环境上安装的`GE`包。`APP`中使用的基础数据结构与该包相同。
88+4. 用户`APP`构建时,使用的`opp`包版本:用户`APP` 构建时,构建环境上安装的`OPP`包。`APP`中使用的算子定义与该包相同。
89+ 
90+`GE`包接口为通用的构图接口(`Operator`系列接口),该接口不关注具体的算子定义,成熟、稳定性高,认为已满足兼容性要求,兼容性的关键在`opp`包。
91+ 
92+从兼容性要求可知,算子构图接口需要满足一定周期内`API``ABI`向前、向后兼容。详细来说,应该满足如下要求:
93+ 
94+1. 升级`opp`包后:不做`APP`重新编译,`APP`可正确构图;做`APP`重编译,无需修改代码,可重编译通过,且可正确构图。
95+2. 降级`opp`包后,`APP`未使用降级后不存在的能力:与升级`opp`包行为相同。
96+3. 降级`opp`包后,`APP`使用了降级后不存在的能力:构图失败,报错。
97+ 
98+继续展开分析,兼容性满足如下要求:
99+ 
100+1. `API`兼容:升级、降级`CANN`版本后,只要不使用新能力,`APP`可以编译通过
101+2. `ABI`兼容:升级、降级`CANN`版本后,只要不使用新能力,`APP`在不做重新编译,可正常调用接口完成构图
102+3. `IR`语义兼容:升级、降级`CANN`版本后,只要不使用新能力,`APP`构造的图语义正确,可被`GE`理解和正常工作
103+ 
104+### `C`语言`API/ABI`兼容性
105+ 
106+`C` 语言无法直接表达 IR 中的可选输入与可选属性。例如,以下 `IR` 定义包含一个可选输入 `xo` 和一个默认值为 `0` 的可选属性 `a`
107+ 
108+```C
109+// IR 定义
110+REG_OP(Foo)
111+ .INPUT(x)
112+ .OPTIONAL_INPUT(xo) // 可选输入 xo
113+ .ATTR(a, Int, 0) // 可选属性 a,默认为 0
114+```
115+ 
116+对应的 `C API` 只能以固定参数列表表示,无法反映参数的可选性:
117+ 
118+```C
119+// C API
120+Tensor *Foo(Tensor *x, Tensor *xo, int64_t a);
121+```
122+ 
123+当 IR 定义发生兼容性扩展(例如新增一个可选属性 `b`)时,`C API` 也必须增加相应参数:
124+ 
125+```C
126+// 新 IR 定义:新增可选属性 b
127+Tensor *Foo(Tensor *x, Tensor *xo, int64_t a, int64_t b);
128+```
129+ 
130+虽然语义上是向后兼容的变更,但由于 `C` 函数签名发生变化,导致`API`不兼容,这是由语言能力限制带来的无法兼容的约束。
131+ 
132+为在使用 `C` 接口时提供稳定可靠的兼容性保障,`esb` 采用静态链接方式将 `libesb.a` 内联至目标应用中,确保接口在编译期冻结,与外部运行环境解耦。
133+ 
134+<img src="figures/app_linkage.svg" style="zoom:80%;" />
135+ 
136+如上图所示,`app``esb`模块作为静态库链接到`app`二进制中,以隔离`CANN`版本升降级的影响。`libesb.a`中,调用`Operator`系列公开接口,因此在`libesb``CANN lib`
137+之间可保证兼容性。在`CANN`版本发生变化时,运行环境`app`使用的`libesb`始终不变:
138+ 
139+<img src="figures/app_run_version.svg" style="zoom:80%;" />
140+ 
141+如上图所示,`app` 在编译时依赖 `CANN``v2` 版本,并通过静态链接方式将 `libesb.a` 内联到最终生成的可执行文件中。运行时,即使系统环境中的 `CANN` 版本与编译时不一致,`app`
142+所使用的 `libesb.a` 仍保持不变,兼容性由 `libesb` 依赖的稳定的 `Operator` 系列接口来保障。
143+ 
144+若用户在 `CANN` 升级或降级后重新编译程序,则构图接口可能随 `CANN` 的 API 变动而发生不兼容。为避免此类问题,建议用户在首次集成时将 `libesb.a` 及其对应头文件拷贝至自身工程的 `third_party`
145+目录,并始终以该副本为基准进行构建,直到明确决定切换到其他版本的 `CANN` 为止。
146+ 
147+注: libesb.a 并非真实环境上的静态库名称,用于统称es base 和 es generated 的库
148+ 
149+### `C++`语言`API/ABI`兼容性
150+ 
151+相较于 `C` 语言,`C++` 提供更强大的语法能力,如函数重载与默认参数,使其在应对 `IR` 接口兼容性演进时更加灵活。然而,由于 `C++` 缺乏统一的 ABI 标准,不同编译器及其版本间的实现可能存在差异,导致跨版本或跨平台的
152+ABI 不兼容问题。
153+ 
154+为兼顾语法灵活性与二进制兼容性,`esb``C++` 构图接口设计为纯头文件库,所有实现通过强制内联方式调用底层稳定的 `C` 接口。编译时享受 `C++` 的语法便利,链接时依赖稳定的 `C` 层实现,从而确保整体 `ABI`
155+的一致性与可移植性。通过该设计,`C++`构图时,`ABI``IR`语义的兼容性问题被转换到`C`的对应问题上。相对`C`语言来说,`C++`不存在`API`不兼容的问题,因此`C`章节中提到的,`libesb.a`
156+的拷贝动作,在`C++`中是不需要的。
157+ 
158+`C++`通过默认参数表达可选属性,通过重载适配可选输入。例如,以下 `IR` 定义包含一个可选输入 `xo` 和一个默认值为 `0` 的可选属性 `a`
159+ 
160+```C++
161+// IR 定义
162+REG_OP(Foo)
163+ .INPUT(x)
164+ .OPTIONAL_INPUT(xo1) // 可选输入 xo1
165+ .ATTR(a, Int, 0) // 可选属性 a,默认为 0
166+ .OUTPUT(y)
167+```
168+ 
169+对应的`C++ API`为:
170+ 
171+```C++
172+namespace es {
173+FORCE_INLINE Tensor *Foo(const Tensor *x, const Tensor *xo1, int64_t a=0);
174+}
175+```
176+ 
177+新增一个可选输入`xo2`和一个可选属性`b`
178+ 
179+```C++
180+namespace es {
181+// v1 版本
182+FORCE_INLINE Tensor *Foo(const Tensor *x, const Tensor *xo1,
183+ int64_t a=0, int64_t b=0);
184+ 
185+// v2 版本,由于新增可选输入,带来的重载版本,重载版本多了一个`xo2`的输入
186+FORCE_INLINE Tensor *Foo(const Tensor *x, const Tensor *xo1, const Tensor *xo2,
187+ int64_t a=0, int64_t b=0);
188+}
189+```
190+ 
191+需要强调的是,重载的目的并非简化调用,而是为了**兼容性保障**。例如,在 `V3` 版本中若同时新增多个可选输入(如 `o3``o4`),也只会引入一个新的重载版本,而不会为每个新增输入分别添加独立重载。
192+ 
193+#### 特殊场景讨论:误用重载接口导致兼容性丧失
194+ 
195+每一个 `C++` 重载版本的 API 都绑定于某一具体版本的 `IR` 定义。当用户使用不恰当的重载形式,即便实际功能未使用,也可能因签名变化而破坏向前兼容性。
196+ 
197+以上述 `Foo` 接口为例,假设在 `V2` 版本中引入了可选输入 `xo2`,用户虽然并不使用该输入,但仍编写了如下调用:
198+ 
199+```C++
200+auto foo = Foo(x, nullptr, nullptr /* xo2 */);
201+```
202+ 
203+此时若运行环境回退至 `V1` 版本并尝试重新编译,尽管 `xo2` 实际为 `nullptr`,也会因重载签名不再存在而引发编译错误,导致向前兼容性失效。
204+ 
205+为尽可能避免这类误用,在重载设计中引入防呆机制,通过 `std::nullptr_t` 参数配合 `[[deprecated]]` 标记,在典型错误调用时提供编译期提示:
206+ 
207+```C++
208+namespace es {
209+[[deprecated("Passing nullptr as xo2 may break forward compatibility. "
210+ "Use this version instead: "
211+ "Foo(const Tensor *x, const Tensor *xo1, int64_t a=0, int64_t b=0). "
212+ "See http://xxxx for more info.")]]
213+FORCE_INLINE Tensor* Foo(const Tensor* x, const Tensor* xo1, std::nullptr_t xo2,
214+int64_t a = 0, int64_t b = 0);
215+}
216+```
217+ 
218+该机制可有效捕捉直接传入 `nullptr` 的情况,但对于以下形式仍无法触发告警:
219+ 
220+```c++
221+Tensor* xo2 = nullptr;
222+auto foo = Foo(x, nullptr, xo2); // 无法检测
223+```
224+ 
225+因此,尽管在 API 设计中已尽力防范误用,仍建议在开发文档与使用说明中明确提示用户:**避免使用超出目标部署环境的重载接口,尤其是在未启用对应 IR 能力时。**
226+注:上述伪代码中类型命名等可能有变化,以真实代码为准
227+ 
228+### `Python`语言`API`兼容性
229+ 
230+`Python` 作为动态语言,不涉及编译期符号链接,因此无需考虑 `ABI` 兼容性问题。相较于 `C++`,虽然 `Python` 不支持函数重载,但其对关键字参数(`keyword arguments`
231+)的良好支持,使其非常适合表达可选属性与可选输入。
232+ 
233+本设计延续了 `torchair` 中的接口风格:使用位置参数表示输入,关键字参数表示属性。该方式既能清晰区分输入与属性,又便于扩展与兼容。
234+ 
235+以下 `IR` 示例定义了一个必选输入、一个可选输入,一个必选属性和一个可选属性:
236+ 
237+```C++
238+// IR 定义
239+REG_OP(Foo)
240+ .INPUT(xr)
241+ .OPTIONAL_INPUT(xo) // 可选输入 xo
242+ .REQUIRED_ATTR(a, Int) // 必选属性,无默认值
243+ .ATTR(b, Int, 0) // 可选属性,默认值为 0
244+```
245+ 
246+它的`Python API`
247+ 
248+```Python
249+def Foo(xr: Tensor, xo: Optional[Tensor] = None, *, a: int, b: int = 0):
250+ """
251+- `xr` 为必选输入
252+- `xo` 通过可选位置参数表达可选输入
253+- `a` 为必选属性,必须以关键字形式传入
254+- `b` 为可选属性,使用关键字参数并指定默认值
255+"""
256+```
257+ 
258+在下一个版本,新增可选输入`xo1`,可选属性`c`,则`API`变为:
259+ 
260+```Python
261+def Foo(xr: Tensor, xo: Optional[Tensor] = None, xo1: Optional[Tensor] = None,
262+ *, a: int, b: int = 0, c: int = 0):
263+```
264+注:上述伪代码中类型命名等可能有变化,以真实代码为准
265+ 
266+## `IR`语义兼容设计
267+ 
268+当用户基于版本 `A``IR` 定义完成构图后,若在版本 `B` 的环境中编译,且 `A``B` 所使用的算子定义存在差异,`GE` 将尝试还原并理解构图意图,并对图进行适配,以符合版本 `B``IR`
269+规范。该过程即为 `IR` 语义兼容性处理流程。
270+ 
271+`IR` 语义兼容仅适用于使用 `C/C++` 构图并采用**静态链接**的场景。在该模式下,构图`lib`(`libesb`)会在编译期固化到 `APP` 的二进制中,因此运行时可能出现构图版本与运行环境不一致的情况,需通过 `GE`
272+的语义兼容机制进行适配。
273+ 
274+而在使用 `Python API` 构图的场景中,由于不存在链接过程,构图操作始终在运行时动态发起,构图行为直接依赖运行环境中的 `IR` 定义。因此,构图版本与运行版本天然保持一致,不存在语义兼容处理过程。
275+ 
276+运行时,三种构图方式的调用关系如下图所示:
277+ 
278+![](figures/api_diff_c_and_python.svg)
279+ 
280+### `IR`语义兼容性处理
281+ 
282+当前支持的`IR`兼容性变更包括:
283+ 
284+- **新增可选输入**:在不影响现有输入顺序的前提下,向结尾添加新的可选输入
285+- **新增支持的数据类型**:为现有输入或输出添加更多支持的数据类型
286+- **新增可选属性**:引入具备默认值的新属性
287+ 
288+除上述情况外,其他任何 `IR` 定义的变更均属于**不兼容变更**。若确有需求,需通过新增独立的 `IR` 算子来实现。
289+ 
290+在语义兼容性处理过程中,`GE` 会基于直构图版本的 `IR` 信息,对图中各算子的语义进行解析与还原。若能成功映射至兼容图版本 `IR`
291+所支持的语义与能力,即视为构图兼容;否则(例如遇到不支持的输入/属性组合、语义歧义或行为差异),兼容性处理失败,流程终止并返回错误。
292+ 
293+`IR` 中新增支持的数据类型,已由推导与能力检查(`dtype` inference 与 `check support`)机制明确处理,不纳入语义兼容流程。
294+ 
295+语义兼容处理主要处理两类变更:**可选属性****可选输入**
296+ 
297+下表展示了在 `直构图 IR``兼容图 IR` 不一致时,针对节点属性和输入的处理逻辑:
298+ 
299+| 【输入】直构图 IR | 【输入】兼容图 IR | 【输入】直构图节点 | 【输出】兼容图节点 |
300+| ---------- | ---------- | --------- | -------------------------- |
301+| 存在可选属性 | 不存在可选属性 | 存在该属性 | ❌ 向前兼容场景:使用了新增属性,**报错退出** |
302+| 存在可选属性 | 不存在可选属性 | 不存在该属性 | ✅ 向前兼容场景:未使用新增属性,**删除该属性** |
303+| 不存在可选属性 | 存在可选属性 | 存在该属性 | ❌ 错误场景:**报错退出** |
304+| 不存在可选属性 | 存在可选属性 | 不存在该属性 | ✅ 向后兼容场景:未使用新增属性,**使用默认值** |
305+| 存在可选输入 | 不存在可选输入 | 可选输入已连边 | ❌ 向前兼容场景:使用了新增输入,**报错退出** |
306+| 存在可选输入 | 不存在可选输入 | 可选输入未连边 | ✅ 向前兼容场景:未使用新增输入,**删除该输入** |
307+| 不存在可选输入 | 存在可选输入 | 可选输入已连边 | ❌ 错误场景:**报错退出** |
308+| 不存在可选输入 | 存在可选输入 | 可选输入未连边 | ✅ 向后兼容场景:未使用新增输入,**忽略处理** |
309+ 
310+**关于兼容性方向的判定说明**
311+ 
312+从上述处理规则可以看出,**语义兼容判断仅依赖于两版本 `IR` 定义间的结构差异**即可完成,无需感知具体版本号,也无需显式区分“向前”或“向后”兼容。
313+ 
314+但出于健壮性考虑,仍应在以下场景中做兼容性一致性校验: 若 `直构图 IR` 相比 `兼容图 IR` 同时**存在新增属性或输入**,又**缺失部分属性或输入**,则说明 `IR`
315+发生过不兼容修改,构图版本已不可直接适配,语义兼容应终止并返回错误。
316+ 
317+## `API`风格设计
318+ 
319+整个构图过程分为以下四个步骤:
320+ 
321+1. **创建图构建器(`EsGraphBuilder`)**
322+ 初始化图构建器实例,用于提供构图所需的上下文、工作空间及构建相关方法。
323+2. **添加起始节点**
324+ 起始节点指无输入依赖的节点,通常包括图的输入(如 `Data` 节点)和权重常量(如 `Const` 节点)。
325+3. **添加中间节点**
326+ 中间节点为具有输入依赖的计算节点,通常由用户构图逻辑生成,并通过已有节点作为输入连接。
327+4. **设置图输出**
328+ 明确图的输出节点,作为计算结果的终点。
329+ 
330+在构图过程中,涉及两个主要对象:
331+ 
332+- **`Graph`**:表示最终构建完成的静态计算图,是构图的目标产物;
333+- **`EsGraphBuilder`**:构图辅助类,提供节点添加、连接、属性设置等方法,并记录构图过程的中间状态。
334+ 
335+`EsGraphBuilder` 仅在构图阶段存在,用于承载中间构建信息,是`APP`构图时直接操作的对象。在构图完成后,其内部状态被封装为 `Graph` 实例返回,`EsGraphBuilder`本身及其相关资源被释放。
336+ 
337+### `IR` 与 `API` 的映射关系
338+ 
339+在三种语言中,`IR``API`的映射逻辑相同。每个 `IR` 映射为一个函数,函数名与算子类型相同。函数参数依次对应算子的输入和属性,返回值对应输出,顺序与 `IR` 定义保持一致。
340+ 
341+例如,算子 `Foo` 定义如下:
342+ 
343+```C
344+REG_OP(Foo)
345+ .INPUT(x1)
346+ .INPUT(x2)
347+ .OUTPUT(y1)
348+ .ATTR(a1, Int, 10)
349+ .ATTR(a2, Int, 20);
350+```
351+ 
352+其对应的函数原型为:
353+ 
354+- **函数名**`Foo`(C++ / Python)或 `EsFoo`(C)
355+- **参数**:共 4 个,依次为 `x1`, `x2`, `a1`, `a2`
356+- **返回值**:输出 `y1`
357+ 
358+语言间的命名规则如下:
359+ 
360+- **C++**:使用命名空间 `es`,避免污染全局符号;
361+- **Python**:通过包名隔离;
362+- **C**:由于缺乏命名空间机制,统一为函数名前添加前缀 `Es`
363+ 
364+### 头文件/模块拆分策略
365+ 
366+每个 `IR` 定义对应一个独立的头文件(`C``C++`)及一个对应的 `Python` 模块(`.py` 文件)。将生成文件按算子粒度拆分,带来以下优势:
367+ 
368+1. **按需引入,减少编译负担**
369+ 使用者可仅包含所依赖算子的头文件,避免不必要的编译依赖,提升构建效率。
370+2. **支持灵活组合**
371+ 拆分后的头文件可按需组合,例如基于用途生成 `all_ops.h`(全部算子)、`math_ops.h`(数学计算相关算子)等多种场景化算子接口集合。
372+3. **提升稳定性与可维护性**
373+`IR` 发生变更时,仅对应算子的头文件或模块需要更新,其他文件可保持不变,便于版本控制和增量构建。
374+ 
375+为提升多语言使用体验,`es` 提供以下聚合接口:
376+ 
377+- `es_all_ops.h`:包含所有 `C++` 封装的算子 API;
378+- `es_all_ops_c.h`:包含所有 `C` 封装的算子 API;
379+- `es_all` Python 包:自动聚合所有生成的 `.py` 模块,提供统一的导入路径和使用接口。
380+ 
381+ 
382+### `C API` 风格设计
383+ 
384+以下示例展示了使用 `C` 接口构造一个“两个输入求和”的计算图:
385+ 
386+```C
387+// 1. 创建图构建器(EsCGraphBuilder)
388+EsCGraphBuilder *builder = EsCreateGraphBuilder("graph_name");
389+ 
390+// 2. 添加起始节点
391+EsCTensorHolder *data0 = EsCreateInput(builder, 0); // 添加第 0 个输入节点
392+EsCTensorHolder *data1 = EsCreateInput(builder, 1); // 添加第 1 个输入节点
393+ 
394+// 3. 添加中间节点
395+EsCTensorHolder *add = EsAdd(data0, data1); // 添加加法计算节点(不再需要显式传入 builder)
396+ 
397+// 4. 设置图输出
398+EsSetOutput(add, 0); // 将 `add` 节点设置为图的第 0 个输出
399+ 
400+// 5. 完成构图,返回最终图对象
401+EsCGraph *graph = EsBuildGraphAndReset(builder); // 获取构建完成的图
402+ 
403+// 6. 释放 builder 及其管理的过程资源
404+EsDestroyGraphBuilder(builder);
405+```
406+ 
407+> [!Note]
408+>
409+> **资源管理说明**
410+>
411+> - 构图过程中,所有通过 `es` 接口创建的中间资源(如 `EsCTensorHolder*` 类型的 `data0`、`add` 等)由 `EsCGraphBuilder` 统一管理,其生命周期与 `builder` 一致。在调用 `EsDestroyGraphBuilder()` 后,这些资源将随 `builder` 一并释放。
412+> - 用户仅需管理两个对象的生命周期:`EsCGraphBuilder*` 和最终生成的 `EsCGraph*`。
413+ 
414+> [!Note]
415+>
416+> **类型封装说明**
417+> 为确保接口兼容性和封装性,`es` 所返回的对象类型(如 `EsCGraphBuilder`、`EsCTensorHolder`)对用户侧保持不透明。它们通过 `extern struct xxx;` 的声明方式暴露,仅提供不完整类型定义,应用侧无法访问其内部结构,只能通过 `es` 提供的接口进行操作。
418+ 
419+#### 属性
420+ 
421+ES 构图时会将 IR 算子中的属性进行映射,C 接口属性类型映射关系为:
422+ 
423+| 算子属性类型 | IR属性类型 | C接口属性类型 |
424+| --------- | ------------- | --------------- |
425+| Int | VT_INT | int64_t |
426+| Float | VT_FLOAT | float |
427+| String | VT_STRING | const char * |
428+| Bool | VT_BOOL | bool |
429+| DataType | VT_DATA_TYPE | C_DataType |
430+| ListInt | VT_LIST_INT | const int64_t * |
431+| ListFloat | VT_LIST_FLOAT | const float * |
432+| ListBool | VT_LIST_BOOL | const bool * |
433+| ListType | VT_LIST_DATA_TYPE | const C_DataType * |
434+| ListListInt | VT_LIST_LIST_INT | const int64_t ** |
435+| Tensor | VT_TENSOR | EsCTensor * |
436+| ListString | VT_LIST_STRING | const char ** |
437+ 
438+##### 生成代码举例
439+ 
440+有算子`Foo`,包含一个输入`x`, 一个`Int`类型属性`a1`,以及一个`ListListInt`类型属性`a2`如下:
441+ 
442+```C++
443+REG_OP(Foo)
444+ .INPUT(x)
445+ .OUTPUT(y)
446+ .ATTR(a1, Int, 10)
447+ .ATTR(a2, ListListInt, {{}, {}});
448+```
449+ 
450+转换为 `C API` 为:
451+ 
452+```c
453+EsCTensorHolder Foo(EsCTensorHolder *x,
454+ int64_t a1,
455+ const int64_t ** a2,
456+ int64_t a2_size,
457+ const int64_t *a2_inner_size);
458+```
459+ 
460+#### 可选输入与可选属性
461+ 
462+由于 `C` 语言不支持默认参数机制,生成的 `C API`**可选输入与普通输入无差别****可选属性也不会保留默认值信息**
463+ 
464+例如,以下 `IR` 定义包含一个可选输入 `x2` 和一个可选属性 `a2`
465+ 
466+```C++
467+REG_OP(Foo)
468+ .INPUT(x1)
469+ .OPTIONAL_INPUT(x2)
470+ .OUTPUT(y)
471+ .REQUIRED_ATTR(a1, Int)
472+ .ATTR(a2, Float, 10);
473+```
474+ 
475+对应生成的 `C API` 为:
476+ 
477+```C
478+EsCTensorHolder *EsFoo(EsCTensorHolder *x1, EsCTensorHolder *x2, int64_t a1, float a2);
479+```
480+ 
481+在该接口中:
482+ 
483+- 可选输入 `x2` 允许传入 `nullptr` 表示未使用
484+- 可选属性 `a2` 必须由调用者显式传入,接口本身不保留默认值
485+- 若传入 `a2` 的值与 `IR` 定义的默认值一致,则视为该属性未配置
486+ 
487+可选输入的未使用、可选属性的未配置状态,将用于后续的语义兼容流程中。
488+ 
489+#### 控制输入
490+ 
491+控制输入用于表达节点之间的控制关系,特点是
492+ 
493+1. 并不会体现到 `IR` 定义的输入中
494+2. 任何算子都允许对其添加 N 个控制输入(`N >= 0`
495+3. 在保证构图合法性(有向无环图)的前提下,任何节点都可以作为其他任意节点的控制输入和控制输出
496+ 
497+因为我们采取的策略是:提供配置控制输入的 `C``C++` 接口。
498+ 
499+`C` 接口使用算子返回的 `EsCTensorHolder` 以及控制输入的 `EsCTensorHolder **` 形式全部节点与对应的节点数量作为入参,具体接口如下:
500+ 
501+```c
502+/**
503+ * @brief 控制边连接函数
504+ * @param dest_ctrl_tensor 控制边连边对象
505+ * @param src_ctrl_tensors 控制边输入
506+ * @param ctrl_tensors_num 控制边数量
507+ * @return 成功为0,其他失败
508+ */
509+uint32_t EsAddControlEdge(EsCTensorHolder *dest_ctrl_tensor,
510+ EsCTensorHolder **src_ctrl_tensors,
511+ int64_t ctrl_tensors_num);
512+```
513+ 
514+#### 多输出
515+ 
516+当算子具有多个输出时,`C API` 使用结构体返回结果。例如,以下 `Foo` 算子定义了两个输出:
517+ 
518+```c++
519+REG_OP(Foo)
520+ .INPUT(x)
521+ .OUTPUT(y1)
522+ .OUTPUT(y2);
523+```
524+ 
525+对应的 `C` 接口为:
526+ 
527+```C
528+typedef struct {
529+ EsCTensorHolder *y1;
530+ EsCTensorHolder *y2;
531+} FooOutput;
532+ 
533+FooOutput EsFoo(EsCTensorHolder *x);
534+```
535+ 
536+该结构体用于表示 `Foo` 算子的多输出,结构体成员名称与 `REG_OP` 中的输出名称保持一致,便于语义对应与自动生成。
537+ 
538+> [!Note]
539+>
540+> **资源管理说明**
541+> 与 `C API` 的整体资源管理策略一致,`EsFoo` 返回的结构体内部成员由 `EsCGraphBuilder` 管理,调用方无需手动释放, 即`EsCTensorHolder*` 指向的资源将在
542+> `EsCGraphBuilder` 销毁时一并释放。
543+ 
544+#### 动态输入与动态输出
545+ 
546+动态输入表示在构图时可传入 `1``n` 个输入;动态输出表示在构图时将生成 `1``n` 个输出。
547+ 
548+`C API` 中,动态输入与输出通过二级指针 (`EsCTensorHolder**`) 表达,并配合 `int64_t` 类型的计数参数说明元素数量。举例来说,`IdentityN`算子接受一到多个输入和输出,并将每个输入拷贝到对应输出,那么其`IR`定义为:
549+ 
550+```C++
551+REG_OP(IdentityN)
552+ .DYNAMIC_INPUT(x)
553+ .DYNAMIC_OUTPUT(y);
554+```
555+ 
556+对应的`C`接口原型为:
557+ 
558+```c
559+typedef struct {
560+ EsCTensorHolder **y; // 动态输出 y
561+ int64_t y_num; // 输出张量数量
562+} IdentityNOutput;
563+IdentityNOutput EsIdentityN(EsCTensorHolder ** x, // 动态输入 x
564+ int64_t x_num, // 输入张量数量
565+ int64_t y_num // 输出张量 y 的数量
566+ );
567+```
568+ 
569+> [!Note]
570+>
571+> **资源管理说明**
572+> 与 `C API` 的整体资源管理策略一致,返回的 `IdentityNOutput` 结构体其内部的 `EsCTensorHolder** y` 成员由 `EsCGraphBuilder` 管理,无需用户手动释放,它们将在 `EsCGraphBuilder` 销毁时一并释放。
573+>
574+> 输入参数 `x` 所指向的指针数组由调用方管理,需自行申请与释放。
575+ 
576+##### 动态输出的个数
577+ 
578+动态输出的实际数量由构图 API 根据算子语义推导而来。API 实现需要理解算子的语义逻辑,以确定应产生多少个输出。
579+ 
580+以上文 `IdentityN` 为例,其输出个数与输入个数相等;而 `SplitD` 则根据属性 `num_split` 的值,对输入进行切分,生成多个输出:
581+ 
582+```C++
583+REG_OP(SplitD)
584+ .INPUT(x)
585+ .DYNAMIC_OUTPUT(y)
586+ .REQUIRED_ATTR(split_dim, Int)
587+ .REQUIRED_ATTR(num_split, Int);
588+```
589+ 
590+然而,目前 `IR` 定义中未显式描述“输入/属性 → 动态输出数量”的映射关系,导致构图 API 难以自动推导输出个数,进而无法正确生成输出。
591+ 
592+为解决该问题,`es` 提供了两种机制:
593+ 
594+**① 手动指定输出数量(默认方案)**
595+ 
596+用户通过显式传参,告知 API 该算子应产生多少个输出。例如:
597+ 
598+```c
599+typedef struct {
600+ EsCTensorHolder **y; // 动态输出 y
601+ int64_t y_num; // 输出张量数量
602+} IdentityNOutput;
603+IdentityNOutput EsIdentityN(EsCTensorHolder ** x, // 动态输入 x
604+ int64_t x_num, // 输入张量数量
605+ int64_t y_num // 输出张量 y 的数量
606+ );
607+```
608+ 
609+**② 注册输出数量推导函数(优化预案)**
610+ 
611+为提升易用性,`es` 支持为每个算子注册动态输出数量的推导逻辑。在生成 API 时将内嵌该逻辑,从而自动确定输出数量,用户无需显式传参。
612+ 
613+例如,为 `IdentityN` 注册一个简单的推导规则:
614+ 
615+```C++
616+// 注册部分,注册输出个数与输入个数相等的代码逻辑
617+REG_FOR_ESB(IdentityN)
618+ .DynamicOutputNum("y", "x_num"); // 推导代码,表达动态输出 y 的数量可以由"x_num"表达式获得
619+```
620+```C++
621+// 头文件定义
622+typedef struct {
623+ EsCTensorHolder **y;
624+ int64_t y_num;
625+} IdentityNOutput;
626+```
627+```C++
628+// 实现伪代码
629+IdentityNOutput IdentityN(EsCTensorHolder ** x, int64_t x_num) {
630+ int64_t y_num = x_num; // 使用注册的推导代码,推导出动态输出 y 的数量
631+ return IdentityN(x, x_num, y_num); // 使用推导出的y_num,调用方案1接口
632+```
633+ 
634+注册的方案当前受制于组件间配合暂时无法实现,当前使用显式指定的方案1,或者[自定义es的实现](../../../examples/custom_es_api/README.md)。
635+ 
636+##### 动态输出与非动态输出混合的情况
637+ 
638+部分算子可能同时包含多个动态输出与非动态输出,如:
639+ 
640+```c
641+REG_OP(CTCBeamSearchDecoder)
642+ .INPUT(inputs, TensorType({DT_FLOAT, DT_DOUBLE}))
643+ .INPUT(sequence_length, TensorType({DT_INT32}))
644+ .REQUIRED_ATTR(beam_width, Int)
645+ .REQUIRED_ATTR(top_paths, Int)
646+ .ATTR(merge_repeated, Bool, true)
647+ .DYNAMIC_OUTPUT(decoded_indices, TensorType({DT_INT64}))
648+ .DYNAMIC_OUTPUT(decoded_values, TensorType({DT_INT64}))
649+ .DYNAMIC_OUTPUT(decoded_shape, TensorType({DT_INT64}))
650+ .OUTPUT(log_probability, TensorType({DT_FLOAT, DT_DOUBLE}))
651+ .OP_END_FACTORY_REG(CTCBeamSearchDecoder)
652+```
653+ 
654+其返回值结构有如下两种考虑:
655+ 
656+1. 多层`struct`结构
657+ 
658+```c
659+typedef struct {
660+ struct {
661+ EsCTensorHolder **decoded_indices,
662+ int64_t decoded_indices_num,
663+ } es_decoded_indices_output;
664+ struct {
665+ EsCTensorHolder **decoded_values,
666+ int64_t decoded_values_num,
667+ } es_decoded_values_output;
668+ struct {
669+ EsCTensorHolder **decoded_shape,
670+ int64_t decoded_shape_num,
671+ } es_decoded_shape_output;
672+ EsCTensorHolder *log_probability,
673+} EsCTCBeamSearchDecoderOutput;
674+```
675+ 
676+2. **非多层情况(当前采取的策略)**
677+ 
678+```c
679+typedef struct {
680+ EsCTensorHolder **decoded_indices,
681+ int64_t decoded_indices_num,
682+ EsCTensorHolder **decoded_values
683+ int64_t decoded_values_num,
684+ EsCTensorHolder **decoded_shape,
685+ int64_t decoded_shape_num,
686+ EsCTensorHolder *log_probability,
687+} EsCTCBeamSearchDecoderOutput;
688+```
689+ 
690+为减少`struct`数量提高代码可读性,同时使接口出参更直观,目前采取**第二种非多层的方式**
691+ 
692+```c
693+ 
694+// 实现伪代码
695+typedef struct {
696+ EsCTensorHolder **decoded_indices;
697+ int64_t decoded_indices_num;
698+ EsCTensorHolder **decoded_values;
699+ int64_t decoded_values_num;
700+ EsCTensorHolder **decoded_shape;
701+ int64_t decoded_shape_num;
702+ EsCTensorHolder *log_probability;
703+} EsCTCBeamSearchDecoderOutput;
704+/**
705+ * @note user needs to provide following inputs for dynamic output numbers:
706+ * decoded_indices_num: dynamic output number of decoded_indices
707+ * decoded_values_num: dynamic output number of decoded_values
708+ * decoded_shape_num: dynamic output number of decoded_shape
709+ */
710+EsCTCBeamSearchDecoderOutput EsCTCBeamSearchDecoder(
711+ EsCTensorHolder *inputs,
712+ EsCTensorHolder *sequence_length,
713+ int64_t decoded_indices_num,
714+ int64_t decoded_values_num,
715+ int64_t decoded_shape_num,
716+ int64_t beam_width,
717+ int64_t top_paths,
718+ bool merge_repeated);
719+}
720+```
721+ 
722+#### 冗余属性
723+ 
724+由于历史原因,部分 `IR` 中定义的属性存在冗余。例如,在 `ConcatD` 算子中,属性 `N` 表示输入 `x` 的数量:
725+ 
726+```C++
727+REG_OP(ConcatD)
728+ .DYNAMIC_INPUT(x)
729+ .OUTPUT(y)
730+ .REQUIRED_ATTR(concat_dim, Int)
731+ .ATTR(N, Int, 1);
732+```
733+ 
734+按照默认映射规则生成的 API 会显得冗余:
735+ 
736+```C
737+EsCTensorHolder *EsConcatD(EsCTensorHolder ** x, int64_t x_num, int64_t concat_dim, int64_t N);
738+```
739+ 
740+优化方式是将属性 `N` 注册为可推导属性,使其由 `x_num` 自动推导。通过如下语句注册推导逻辑:
741+ 
742+```C++
743+REG_FOR_ESB(ConcatD)
744+.InferableAttr("N", "x_num"); // 注册推导代码,认为属性 N 是“可推导”的,推到逻辑为等于 x_num
745+```
746+ 
747+此机制与动态输出个数的推导逻辑类似,生成的推导版本 API 会被优先采用,原型及逻辑如下:
748+ 
749+```c
750+EsCTensorHolder *EsConcatD(EsCTensorHolder ** x, int64_t x_num, int64_t concat_dim) {
751+ int64_t N = x_num; // 根据注册逻辑推导 N
752+ return EsConcatD(x, x_num, concat_dim, N); // 调用默认实现
753+}
754+```
755+注册的方案当前同样受制于组件间配合暂时无法实现,可以使用[自定义es的实现](../../../examples/custom_es_api/README.md)。
756+ 
757+#### 控制子图
758+ 
759+部分算子包含将子图作为入参,以 `Case` 算子为例,原型如下:
760+ 
761+```c
762+REG_OP(Case)
763+ .INPUT(branch_index, DT_INT32)
764+ .DYNAMIC_INPUT(input, TensorType::ALL())
765+ .DYNAMIC_OUTPUT(output, TensorType::ALL())
766+ .DYNAMIC_GRAPH(branches)
767+ .OP_END_FACTORY_REG(Case)
768+```
769+ 
770+其语义可以等价于
771+ 
772+```c
773+// 实现伪代码
774+switch (branch_index) {
775+ case 0:
776+ output = branches[0](input);
777+ break;
778+ case 1:
779+ output = branches[1](input);
780+ break;
781+ case 2:
782+ output = branches[2](input);
783+ break;
784+ // ...
785+ return output;
786+}
787+```
788+ 
789+针对动态输入`input`和动态输出`output`个数沿用之前的设计(参考`动态输入与动态输出`章节)。
790+ 
791+其中子图通过二级指针 (`ge::Graph **branches`) 表达并配合 `branches_num` 计数参数说明元素数量。
792+ 
793+对于 C 接口来说,考虑 C 语言特性,函数签名使用 `EsCGraph **` 不透明指针表达,之后在函数内部进行强转。
794+ 
795+生成后的头文件与接口如下:
796+ 
797+```c
798+// 头文件定义
799+typedef struct {
800+ EsCTensorHolder **output;
801+ int64_t output_num;
802+} EsCaseOutput;
803+EsCaseOutput EsCase(EsCTensorHolder *branch_index, EsCTensorHolder **input, int64_t input_num,
804+ int64_t output_num, EsCGraph **branches, int64_t branches_num);
805+```
806+ 
807+> [!Note]
808+>
809+> **资源管理说明**
810+>
811+> 与 `C API` 的整体资源管理策略一致,返回的 `EsCaseOutput` 结构体内部的 `EsCTensorHolder** output` 成员由 `EsCGraphBuilder` 管理,无需用户手动释放,它们将在 `EsCGraphBuilder` 销毁时一并释放。
812+>
813+> 子图入参 `branches` 在用户创建好并传入接口后,其生命周期会在函数内部转移给对应的 `EsCGraphBuilder` 并由其统一管理,用户不应在传入子图后再对其进行操作。
814+>
815+> 输入参数 `input` 所指向的指针数组由调用方管理,需自行申请与释放。
816+>
817+> **输入输出个数说明**
818+>
819+> 详见附录<<子图内外index映射关系表达>>章节
820+ 
821+#### `Tensor` 属性语法
822+ 
823+`Const` 算子的定义中,属性类型为 `Tensor`,这是一种特殊的数据类型,通常需要多个参数共同描述。
824+ 
825+针对该类型属性,`C API` 提供如下接口用于创建常量:
826+ 
827+```c
828+/**
829+ * @brief 本接口用于C用户创建EsCTensor
830+ * @param data 张量数据指针
831+ * @param dim 张量维度数组指针
832+ * @param dim_num 张量维度数量
833+ * @param data_type 张量的DataType枚举值
834+ * @param format 张量格式
835+ * @return 张量的匿名指针,所有权交给调用方控制, 失败时返回nullptr
836+ */
837+EsCTensor *EsCreateEsCTensor(const void *data,
838+ const int64_t *dim,
839+ int64_t dim_num,
840+ C_DataType data_type,
841+ C_Format format);
842+/**
843+ * @brief 本接口用于C用户通过binary文件创建EsCTensor
844+ * @param data_file_path 张量binary数据文件路径
845+ * @param dim 张量维度数组指针
846+ * @param dim_num 张量维度数量
847+ * @param data_type 张量的DataType枚举值
848+ * @param format 张量格式
849+ * @return 张量的匿名指针,所有权交给调用方控制, 失败时返回nullptr
850+ */
851+EsCTensor *EsCreateEsCTensorFromFile(const char *data_file_path,
852+ const int64_t *dim,
853+ int64_t dim_num,
854+ C_DataType data_type,
855+ C_Format format);
856+```
857+ 
858+这两个接口会生成一个 `EsCTensor *`的匿名指针指向`ge::Tensor *`,用于后续作为 `Tensor` 类型属性传入对应算子的构图函数。
859+ 
860+参数说明如下:
861+- **`data` / `const_data_file_path`**:常量数据来源。前者表示数据已加载至内存中,后者为数据文件路径,将从文件中读取内容。
862+- **`dims` + `dims_num`**:指定常量 `Tensor` 的形状。
863+- **`data_type`**:数据类型,使用 `C_DataType` 枚举,定义与 `ge::DataType` 保持一致。
864+- **`format`**:数据格式,使用 `C_Format` 枚举,定义与 `ge::Format` 保持一致。
865+ 
866+> [!Note]
867+>
868+> **资源管理说明**
869+> `EsCreateEsCTensor` / `EsCreateEsCTensorFromFile`返回的结构体指针由调用方进行管理。
870+ 
871+对应的,`Const` 算子的原型定义以及 `API` 为:
872+ 
873+```C++
874+// Const 原型
875+REG_OP(Const)
876+ .OUTPUT(y)
877+ .ATTR(value, Tensor, Tensor());
878+ 
879+// C API
880+EsCTensorHolder *Const(EsCGraphBuilder *builder, EsCTensor *value);
881+```
882+ 
883+#### `Const` 的直接接口
884+针对 `Const` 算子,为了便于使用,我们在 `C/C++` 中都提供了直接的接口:
885+ 
886+```c
887+EsCTensorHolder *EsCreateConstInt64(EsCGraphBuilder *graph,
888+ const int64_t *value,
889+ const int64_t *dims,
890+ int64_t dim_num);
891+EsCTensorHolder *EsCreateConstInt32(EsCGraphBuilder *graph,
892+ const int32_t *value,
893+ const int64_t *dims,
894+ int64_t dim_num);
895+EsCTensorHolder *EsCreateConstUInt64(EsCGraphBuilder *graph,
896+ const uint64_t *value,
897+ const int64_t *dims,
898+ int64_t dim_num);
899+EsCTensorHolder *EsCreateConstUInt32(EsCGraphBuilder *graph,
900+ const uint32_t *value,
901+ const int64_t *dims,
902+ int64_t dim_num);
903+EsCTensorHolder *EsCreateConstFloat(EsCGraphBuilder *graph,
904+ const float *value,
905+ const int64_t *dims,
906+ int64_t dim_num);
907+```
908+ 
909+参数说明如下:
910+- **`graph`**:算子所属的`Graph`
911+- **`value`**:常量数据来源。
912+- **`dims` + `dims_num`**:指定常量 `Tensor` 的形状。
913+ 
914+具体接口可以参考[api目录](../api/es_cpp.md)
915+ 
916+#### `Scalar`的特殊语法
917+ 
918+在许多场景下,需要构造一个 `Scalar` 类型的常量节点。使用通用的 `EsCreateConst` 接口构造 `Scalar` 会显得繁琐:
919+ 
920+```C
921+float value = 10.0;
922+EsConst *tensor = EsCreateConst(builder, &value, nullptr, 0, ES_DT_FLOAT, ES_FORMAT_ND);
923+EsCTensorHolder *c1 = Const(builder, tensor);
924+```
925+ 
926+为简化此类常见操作,框架提供了一组快捷 API,用于直接创建标量类型的常量 `Const` 节点:
927+ 
928+```C++
929+EsCTensorHolder *EsCreateConstScalarFloat32(EsCGraphBuilder *builder, float value);
930+EsCTensorHolder *EsCreateConstScalarFloat16(EsCGraphBuilder *builder, float value);
931+EsCTensorHolder *EsCreateConstScalarInt64(EsCGraphBuilder *builder, int64_t value);
932+EsCTensorHolder *EsCreateConstScalarInt32(EsCGraphBuilder *builder, int32_t value);
933+// 更多数据类型,按需添加
934+```
935+ 
936+这些 API 将在图中创建一个 `Const` 节点,其属性具有以下特征:
937+ 
938+- `shape` 为标量(即 0 维)
939+- `format``FORMAT_ND`
940+- 返回值为已构建的 `EsCTensorHolder*`,可直接用于后续构图流程
941+ 
942+这些接口的底层依然使用 `EsCreateConst` 构造常量,只是对标量场景做了语法包装,语义更加直观、简洁。
943+ 
944+### `C++ API` 风格设计
945+ 
946+相较于通过指针传参和手动管理资源的 C API,C++ API 利用类封装自动完成资源管理,调用者无需显式释放资源。以下示例展示构造一个“两个输入求和”的计算图:
947+ 
948+```C++
949+using namespace es;
950+ 
951+// 1. 创建图构建器(EsGraphBuilder)
952+EsGraphBuilder builder("graph_name");
953+ 
954+// 2. 添加 2 个输入节点
955+EsTensorHolder [data0, data1] = builder.CreateInputs<2>();
956+ 
957+// 3. 添加中间节点,C++中,加减乘除等常用运算符被重载,可以直接使用
958+EsTensorHolder add = data0 + data1;
959+ 
960+// 4. 设置图输出
961+builder.SetOutput(add, 0);
962+ 
963+// 5. 完成构图,获取构造好的`Graph`对象,`builder`中的资源随析构而销毁
964+std::unique_ptr<ge::Graph> graph = builder.BuildAndReset();
965+```
966+ 
967+#### 属性
968+ 
969+ES构图时会将IR算子中的属性进行映射,C++属性类型映射关系为:
970+ 
971+| 算子属性类型 | IR属性类型 | `C++`接口属性类型 |
972+| --------- | ------------- | ------------------------------ |
973+| Int | VT_INT | int64_t |
974+| Float | VT_FLOAT | float |
975+| String | VT_STRING | const char * |
976+| Bool | VT_BOOL | bool |
977+| DataType | VT_DATA_TYPE | ge::DataType |
978+| ListInt | VT_LIST_INT | const std::vector\<int64_t\> & |
979+| ListFloat | VT_LIST_FLOAT | const std::vector\<float\> & |
980+| ListBool | VT_LIST_BOOL | const std::vector\<uint8_t\> & |
981+| ListType | VT_LIST_DATA_TYPE | const std::vector\<ge::DataType\> & |
982+| ListListInt | VT_LIST_LIST_INT | const std::vector\<std::vector\<int64_t\>\> & |
983+| Tensor | VT_TENSOR | std::unique_ptr\<ge::Tensor\> |
984+| ListString | VT_LIST_STRING | const std::vector\<const char *\> & |
985+ 
986+##### 生成代码举例
987+ 
988+有算子`Foo`,包含一个输入`x`, 一个`Int`类型属性`a1`,以及一个`ListListInt`类型属性`a2`如下:
989+ 
990+```C++
991+REG_OP(Foo)
992+ .INPUT(x)
993+ .OUTPUT(y)
994+ .ATTR(a1, Int, 10)
995+ .ATTR(a2, ListListInt, {{}, {}});
996+```
997+ 
998+转换为`C++ API`为:
999+ 
1000+```C++
1001+namespace es {
1002+EsCTensorHolder Foo(const EsTensorHolder &x,
1003+ int64_t a1 = 10,
1004+ const std::vector<std::vector<int64_t>> &a2 = {{}, {}});
1005+}
1006+```
1007+ 
1008+C++ API 兼容 C API 的设计理念,并基于 C++ 语言特性提供更简洁、自然的调用方式。下文将介绍这些特性。
1009+ 
1010+#### 可选属性
1011+ 
1012+C++ API 通过默认参数表达 IR 中的可选属性。例如,`Foo` 算子有两个可选属性:
1013+ 
1014+```C++
1015+REG_OP(Foo)
1016+ .INPUT(x)
1017+ .OUTPUT(y)
1018+ .ATTR(a1, Int, 10)
1019+ .ATTR(a2, Float, 0.0);
1020+```
1021+ 
1022+对应的 C++ 接口为:
1023+ 
1024+```C++
1025+namespace es {
1026+ EsTensorHolder Foo(const EsTensorHolder &x, int64_t a1 = 10, float a2 = 0.0);
1027+}
1028+```
1029+ 
1030+若某个可选属性出现在了必选属性之后, 例如:
1031+ 
1032+```C++
1033+REG_OP(Foo)
1034+.INPUT(x)
1035+.OUTPUT(y)
1036+.ATTR(a1, Int, 10) // 可选属性 a1
1037+.REQUIRED_ATTR(a2, Int) // 必选属性 a2
1038+.ATTR(a3, Float, 0.0); // 可选属性 a3
1039+```
1040+ 
1041+有两种处理方案:
1042+ 
1043+1. 该可选属性在 API 中退化为普通参数,必须显式传入。
1044+ 
1045+对应的 C++ 接口为:
1046+ 
1047+```C++
1048+namespace es {
1049+ EsTensorHolder Foo(const EsTensorHolder &x, int64_t a1, int64_t a2, float a3=0.0);
1050+}
1051+```
1052+ 
1053+优点是函数参数顺序和ir顺序一致,缺点是用户必须传递a1的值10或者其他
1054+ 
1055+2. 对参数进行重排,可选放在最后 对应的 C++ 接口为:
1056+ 
1057+```C++
1058+namespace es {
1059+ EsTensorHolder Foo(const EsTensorHolder &x, int64_t a2, int64_t a1=10, float a3=0.0);
1060+}
1061+```
1062+ 
1063+优点用户无需传递a1的值,缺点是函数参数和ir顺序不一致。
1064+ 
1065+考虑到易用性和形参的名字本身就能体现属性的名称,采取方案2
1066+ 
1067+#### 控制输入
1068+ 
1069+通过`std::vector<EsTensorHolder>`表达控制输入,延续`C API`思路,对应的`C++ API`为:
1070+ 
1071+```c++
1072+namespace es {
1073+Status EsTensorHolder::AddControlEdge(const std::vector<EsTensorHolder> &ctrl_ins) const;
1074+}
1075+```
1076+ 
1077+#### 动态输入与动态输出
1078+ 
1079+通过`std::vector`表达动态输入输出,对于动态输出个数的问题,延续`C API`的方式。
1080+ 
1081+`IdentityN`为例(原型参考`C API`动态输入输出章节),`C++`接口为:
1082+ 
1083+```C++
1084+namespace es {
1085+std::vector<EsTensorHolder> IdentityN(const std::vector<EsTensorHolder> &x // 动态输入 x
1086+ int64_t y_num // 输出张量 y 的数量
1087+ );
1088+}
1089+```
1090+ 
1091+对于包含多个动态输出以及动态输出与非动态输出混合情况的算子,采用与C接口类似的方式构建`struct`结构体承载输出。
1092+ 
1093+`CTCBeamSearchDecoder`算子为例,`C++`接口的输出结构为:
1094+ 
1095+```c++
1096+struct CTCBeamSearchDecoderOutput {
1097+ std::vector<EsTensorHolder> decoded_indices;
1098+ std::vector<EsTensorHolder> decoded_values;
1099+ std::vector<EsTensorHolder> decoded_shape;
1100+ EsTensorHolder log_probability;
1101+};
1102+/**
1103+ * @note user needs to provide following inputs for dynamic output numbers:
1104+ * decoded_indices_num: dynamic output number of decoded_indices
1105+ * decoded_values_num: dynamic output number of decoded_values
1106+ * decoded_shape_num: dynamic output number of decoded_shape
1107+ */
1108+inline CTCBeamSearchDecoderOutput CTCBeamSearchDecoder(
1109+ const EsTensorHolder &inputs,
1110+ const EsTensorHolder &sequence_length,
1111+ int64_t decoded_indices_num,
1112+ int64_t decoded_values_num,
1113+ int64_t decoded_shape_num,
1114+ int64_t beam_width,
1115+ int64_t top_paths,
1116+ bool merge_repeated=true);
1117+```
1118+ 
1119+#### 控制子图
1120+ 
1121+`C`接口实控制子图的方式类似,`C++`接口的控制子图通过`std::vector<std::unique_ptr<ge::Graph>>`表达,子图个数通过`vector`的大小来表达。
1122+ 
1123+`Case`为例(原型参考`C`接口控制子图章节),`C ++`接口为:
1124+ 
1125+```c++
1126+namespace es {
1127+inline std::vector<EsCTensorHolder> Case(
1128+ const EsTensorHolder &branch_index,
1129+ const std::vector<EsTensorHolder> &input,
1130+ int64_t output_num,
1131+ std::vector<std::unique_ptr<ge::Graph>> branches)
1132+ );
1133+}
1134+```
1135+ 
1136+> [!Note]
1137+>
1138+> **资源管理说明**
1139+> 子图`vecotr`的生命周期会在函数内部转移,最终由`EsCGraphBuilder`进行管理。
1140+>
1141+ 
1142+#### 运算符重载
1143+ 
1144+`C++ API` 利用运算符重载,使构图代码更直观、自然。对于支持重载的算子,API 同时提供函数版本与运算符版本,二者等价。例如,加法操作既可以使用函数调用:
1145+ 
1146+```c++
1147+EsTensorHolder add = Add(x1, x2);
1148+```
1149+ 
1150+也可以使用更简洁的运算符形式:
1151+ 
1152+```C++
1153+EsTensorHolder add = x1 + x2;
1154+```
1155+ 
1156+运算符重载规则与 PyTorch 保持一致,同时考虑C++的合法操作符,我们支持的运算及其对应算子如下:
1157+ 
1158+| 运算符 | **对应算子** |
1159+| ------ | ----------------- |
1160+| `+` | `Add` |
1161+| `-` | `Sub` |
1162+| `*` | `Mul` |
1163+| `/` | `Div` |
1164+ 
1165+ 
1166+### `Python API` 风格设计
1167+ 
1168+以下示例展示了使用 `Python` 接口构造一个“两个输入求和”的计算图:
1169+ 
1170+```python
1171+rom ge.es.graph_builder import GraphBuilder, TensorHolder
1172+ 
1173+# 1. 创建图构建器(GraphBuilder)
1174+builder = GraphBuilder("graph_name")
1175+ 
1176+# 2. 添加 2 个输入节点
1177+data0, data1 = builder.create_inputs(2)
1178+ 
1179+# 3. 添加中间节点
1180+add = data0 + data1
1181+ 
1182+# 4. 设置图输出
1183+builder.set_graph_output(add, 0)
1184+ 
1185+# 5. 完成构图,返回最终图对象
1186+graph = builder.build_and_reset()
1187+```
1188+ 
1189+`C++` 类似,`Python API` 利用语言特性提升易用性。构图过程中无需显式管理资源,遵循与 `C++ API` 相同的运算符重载规则。`es` 还提供了符合 Python 风格的封装,使构图流程更自然、直观。
1190+ 
1191+#### `Python API`原型规则
1192+ 
1193+`Python API`遵守整体的`IR``API`的映射关系,保持输入参数与`IR`定义的顺序一致。同时利用`Python`的占位参数、关键字参数、默认值能力,完整支持可选输入、可选属性。在`Python API`的兼容性章节已有举例
1194+,本节不做赘述。
1195+ 
1196+#### 多输出
1197+ 
1198+自定义输出表达的类,类中每个元素可以是`Tensor``list[Tensor]`类型, 分别表示普通输出和动态输出
1199+ 
1200+#### 控制输入
1201+ 
1202+有两种方案可以选择:
1203+ 
1204+1. 通过关键字参数传递 `dependencies=[]`,默认为空,如下所示
1205+ 
1206+```Python
1207+def Foo(xr: Tensor, xo: Optional[Tensor] = None, xo1: Optional[Tensor] = None,
1208+ *, a: int, b: int = 0, c: int = 0, dependencies: List[Tensor] = []):
1209+```
1210+ 
1211+2. 通过单独的控制 API 来实现
1212+ 
1213+```python
1214+f0 = Foo()
1215+f1 = Foo()
1216+f2 = Foo()
1217+ 
1218+f2.control_dependencies([f0, f1])
1219+ 
1220+```
1221+ 
1222+我们采用方案 2 来实现,原因有如下几点:
1223+ 
1224+- 方案 1 是 torchair 目前采用的风格,之所以这么做是因为 torchair 有一个设计理念防呆大于易用,因此其引入了一条构图操作应该完全通过 IR 的 API
1225+ 来完成的原则,此原则是为了杜绝任何可能改坏图的后处理行为,ES 构图在考虑各方取舍之后,决定不追求此原则,具体可以看后续`是否要做到完全防呆`的讨论
1226+- 绝大多数构图场景通过数据依赖就可以完整表达顺序,用到控制边的场景可能是某些操作之间没有数据交换,但是仍然希望按照特定顺序执行,比如变量读取和更新操作,PyTorch 甚至都没提供控制边的概念,因此没有必要对每个 IR 的
1227+ ES API 都暴露一个控制边的参数
1228+ 
1229+- ES C 的实现因为没有默认参数,所以不会在 IR 的 ES API 层面添加参数,而是通过提供单独 API 设置,鉴于 ES 的多语言能力应该保持一致的原则,ES Python 实现是对 ES C 的封装,因此 API 风格也应该和 ES
1230+ C 保持一致
1231+ 
1232+同时我们结合语言的特点,可以使用类似 TensorFlow 的风格,额外提供如下风格的控制边设置功能
1233+ 
1234+```python
1235+with EsBuilder.control_dependencies([f0, f1]):
1236+ f2 = Foo()
1237+```
1238+#### 操作符重载
1239+ 
1240+在 Python 中,可以通过在 `Tensor` 类中定义特定的特殊方法(也称为魔术方法)来实现操作符重载。
1241+ 
1242+如下是一些常见的操作符和对应的特殊方法:
1243+ 
1244+- `+` : `__add__(self, other)`
1245+- `-` : `__sub__(self, other)`
1246+- `*` : `__mul__(self, other)`
1247+- `/` : `__div__(self, other)`
1248+ 
1249+ 
1250+特殊方法内部调用对应算子实现
1251+ 
1252+| 运算符 | **对应算子** |
1253+| ---- | ------------ |
1254+| `+` | `Add` |
1255+| `-` | `Sub` |
1256+| `*` | `Mul` |
1257+| `/` | `Div` |
1258+ 
1259+ 
1260+#### Python 特有的一些构图语法糖
1261+ 
1262+##### node 级别的私有属性 scope 设置
1263+ 
1264+详见后续的私有属性设置章节
1265+ 
1266+ 
1267+## 详细设计
1268+ 
1269+### 构建流程
1270+ 
1271+如前所述,在 `API` 生成过程中,需要依赖历史的 `IR` 信息,以生成满足兼容性要求的函数签名。因此,从算子仓的构建视角来看,构建工程新增了一个额外的输入和输出:各版本的原型信息。
1272+ 
1273+![](figures/data_flow_build.svg)
1274+ 
1275+展开而言,在算子工程的构建过程中,原型信息编译完成后,将进入 **ES 系列 API 的生成与编译阶段**。该阶段基于当前版本与历史原型库,按照预设规则进行代码生成(codegen),生成符合兼容性规范的 ES 构图
1276+API,并将其编译为二进制文件。
1277+ 
1278+随后,生成的 ES 二进制及对应头文件会被打包进运行包(run 包)中发布。整个构建流程中,ES 的实现代码仅作为构建过程中的中间产物,**不会合入算子代码仓**
1279+ 
1280+![](./figures/data_flow_build_1.svg)
1281+ 
1282+同时在上图的"ES 系列 API 的生成与编译阶段流程"中,ES codegen 读取"历史原型库",具体来说:是指基于历史原型信息,生成满足兼容性要求的 ES API
1283+ 
1284+所谓“历史原型库”,相较于原型定义,具有以下显著差异:
1285+ 
1286+- **定义方式不同**
1287+
1288+ 原型定义通过 `C++` 代码中的 `REG_OP` 宏进行注册,需经编译后方可使用;而历史原型信息采用结构化文本格式描述,可直接解析,无需编译,适合在构建流程中快速读取和处理。
1289+ 
1290+- **数据内容不同**
1291+ “历史原型库”按商发版本组织,记录了历史上每个商发版本的完整原型定义,用于支持多版本对比与兼容性判断。
1292+
1293+ 按照兼容性规范,商发版本中的接口(包括构图接口)需在发布后**向后兼容一年,向前兼容一年**。例如,2025 年 6 月 30 日发布的版本应向后兼容至 2024 年 3 月 30 日之前的版本,向前兼容至 2026 年 9 月 30
1294+ 日之后的版本。 鉴于兼容周期可能因规范调整而变化,历史原型库需**完整保留所有历史版本的 API 定义**,以便灵活适应未来兼容性策略的演进。
1295+ 
1296+### 模块划分
1297+ 
1298+构建流程中新增了四个模块:
1299+ 
1300+- **ES generator**(归属 `GE`):对应前文所述的 `ES codegen` 阶段,结合当前版本原型信息,生成符合兼容性要求的 ES 构图 API。
1301+- **历史原型库**(归属 `opp`):用于定义和维护原型库协议,存储所有历史的原型信息,为多版本兼容性处理提供基础支撑。
1302+- **generated Eager Style Op API**(归属 `opp`):该模块为构图 API 的生成结果,由构建流程中动态生成,并随运行包发布。由于不参与源码维护,图中以虚线表示其存在。
1303+- **Eager Style Graph Builder**(归属 `GE`):该模块为 `generated Eager Style Op API` 的基础,配合后者提供完整的 ES 构图能力。
1304+ 
1305+![](./figures/logical_all.svg)
1306+ 
1307+从开发视角来看,`ES generator``Eager Style Graph Builder` 可直接纳入 `GE` 仓维护
1308+ 
1309+ 
1310+### 模块部署
1311+ 
1312+下图用来描述前文涉及到的模块在 run 包中的归属关系,以及 run 包中新增的内容(交付件)
1313+ 
1314+![](figures/physical_view.svg)
1315+ 
1316+ 
1317+#### Python 封装的具体实现
1318+ 
1319+我们采用 ctypes(内置库,不引入额外的依赖)的方式基于 `C` 代码的 so 做 API 的封装;并且如上图所示,我们需要对 esb generated 的产物和 esb base 两部分的 C 代码做封装,分别集成到 opp 包和 compile 包。
1320+以如下原型 Gen 出来的 C 函数签名举例:
1321+ 
1322+```c
1323+#ifdef
1324+__cplusplus
1325+extern "C" {
1326+#endif
1327+ EsCTensorHolder *Esphony_1i1o(EsCTensorHolder *x, int64_t index);
1328+#ifdef
1329+__cplusplus
1330+}
1331+#endif
1332+```
1333+ 
1334+我们可以通过如下 Python 封装层来实现对应的 Python API 的功能
1335+ 
1336+```python
1337+import ctypes
1338+import os
1339+try:
1340+ from pyge.es_graph_builder import GraphBuilder, TensorHolder
1341+ from pyge.library.pyes_graph_builder_wrapper import (
1342+ esb_lib,
1343+ get_generated_lib
1344+ )
1345+except ImportError as e:
1346+ pytest.skip(f"无法导入 pyge 模块: {e}", allow_module_level=True)
1347+ 
1348+# 定义函数原型
1349+esb_generated_lib = get_generated_lib()
1350+esb_generated_lib.Esphony_1i1o.argtypes = [ctypes.c_void_p, ctypes.c_int64]
1351+esb_generated_lib.Esphony_1i1o.restype = ctypes.c_void_p
1352+ 
1353+# 创建 Python 包装函数
1354+def phony_1i1o(x: TensorHolder, index: int) -> TensorHolder:
1355+ """
1356+ 调用 Esphony_1i1o 函数的 Python 包装
1357+ 参数:
1358+ x: TensorHolder 对象
1359+ index: int64 类型的索引值
1360+ 返回:
1361+ 返回新的 TensorHolder 对象
1362+ """
1363+ # 获取底层 C 对象的指针
1364+ x_ptr = x.handle
1365+ 
1366+ # 调用 C 函数并创建新的 Python 包装对象
1367+ return TensorHolder(esb_lib.Esphony_1i1o(x_ptr, ctypes.c_int64(index)))
1368+```
1369+ 
1370+### ES Python 构图的额外处理
1371+ 
1372+从实际业务流程来看,`APP` 调用 `libesb` 完成构图后,需要应用该图,即通过 `GE` 接口完成图编译与执行。目前,`GE` 仅提供 `C++` API,因此:
1373+ 
1374+- **使用 C++ 的 APP**:可直接进行构图、编译与执行
1375+- **使用 Python 的 APP**:虽能完成构图,但无法持有构图结果,且缺少后续编译与执行能力
1376+ 
1377+为支持 Python API 的完整功能,需要在以下模块新增 Python 封装:
1378+ 
1379+* **GE**:作为通用图结构的载体模块,需将 `Graph` 等基础结构封装为 Python 可用对象,同时打包到 `GE 图编译子包`
1380+* **GE**:需将已有的 `Session` 类封装为 Python 类,暴露编译和执行能力,同时打包到 `GE 图编译子包`
1381+ 
1382+![](figures/development_view.svg)
1383+ 
1384+ 
1385+### 是否要做到完全防呆
1386+ 
1387+完全防呆前文提到是 torchair 的一个设计原则,ES 如果 follow 这个原则,意味着所有操作要在 ES API 内完成闭环,同时不对外提供任何可以基于对象二次改图的接口;对于 ES 来说会有如下问题:
1388+ 
1389+1. ES API 是忠实于 IR 定义 gen 出来的,同时要支撑多个场景的使用,如用户自定义 pass,内部图的 dump code
1390+ able 完整表达,这意味着要支持的场景会比 torchair 面临的场景复杂,这会出现私有属性、控制边等不体现在 IR 上的信息需要 ES 构图来表达,如果 follow
1391+ torchair 的原则,会对每个 API 统一添加很多可能很少场景下才会用到参数,造成可读性下降的同时会打破 ES API 是忠实于 IR 定义这一原则
1392+ 
1393+2. 不对外提供任何可以基于对象二次改图的接口,对 ES 来说就是不暴露 GetProducer 的获取 GNode 对象的接口,这个带来的影响如下
1394+ 
1395+- 实际场景下,GetProducer 很难干掉,因为 ES API 的实现构造节点连边关系的时候,鉴于我们 ES 复用已有的数据结构的原则,需要复用对 GNode 建立连边的接口,需要 Graph::AddEdge(
1396+ tensorholder0->GetProducer(), tensorholder1->GetProducer(),如果要去掉,则面临此新增 ES 专门的连边基础接口,打破了复用原则
1397+ 
1398+- GetProducer 提供的好处也显而易见,可以让 ES 跟现有的 GE 的数据结构建立桥梁,意味着 ES 的能力更强大,拥有更多可能性
1399+ 
1400+3. 鉴于前文提到的 ES 多语言(C、C++、Python)能力一致的原则,对 ES API 添加参数会造成 ES C 的构图易用性下降,因为 C 语言不支持默认参数,此举会造成使用者不得感知所有参数
1401+ 
1402+鉴于上述,我们 ES 的原则是 API 内部仅完成 IR 相关的构图设置,设置私有属性和控制边等 IR 不相干的行为通过单独的 API 完成,做到部分防呆的同时兼顾构图的高易用性
1403+ 
1404+### 私有属性
1405+ 
1406+目前对图对象、节点对象、节点的输出对象设置私有属性,整体来说以下几种方式可以选择:
1407+ 
1408+1. 基于现有的基础类设置属性接口进行设置(C 不支持,因为 GNode 没有对应的 C 的 struct)
1409+ 
1410+```c++
1411+EsGraphBuilder builder("test_graph");
1412+auto t = graph_builder->CreateScalar(int64_t(321));
1413+// ... 其他构图代码
1414+std::unique_ptr<ge::Graph> graph = builder.Build();
1415+graph->SetAttr(attr_name, attr_value); // 依赖现有的ge::Graph类的设置属性能力,以及AttrValue的泛型对象支持任意的基本类型属性
1416+ 
1417+auto node_ptr = t.GetProducer();
1418+node_ptr->SetAttr(attr_name, attr_value); // 依赖现有的ge::GNode类的设置属性能力,以及AttrValue的泛型对象支持任意的基本类型属性
1419+node_ptr->SetOutputAttr(attr_name, attr_value); // 依赖现有的ge::GNode类的设置属性能力,以及AttrValue的泛型对象支持任意的基本类型属性
1420+ 
1421+```
1422+ 
1423+```python
1424+# 封装GNode和Graph的python类,提供方法设置
1425+ 
1426+```
1427+ 
1428+2. 基于EsGraphBuilder和EsTensorHolder封装的接口进行设置
1429+ 
1430+```c++
1431+class EsGraphBuilder {
1432+ Status SetAttr(const char *attr_name, int64_t value);
1433+ Status SetAttr(const char *attr_name, const char *value);
1434+ Status SetAttr(const char *attr_name, bool value);
1435+}
1436+class EsTensorHolder {
1437+ Status SetAttr(const char *attr_name, int64_t value);
1438+ Status SetAttr(const char *attr_name, const char *value);
1439+ Status SetAttr(const char *attr_name, bool value);
1440+ Status SetAttrForNode(const char *attr_name, int64_t value);
1441+ Status SetAttrForNode(const char *attr_name, const char *value);
1442+ Status SetAttrForNode(const char *attr_name, bool value);
1443+}
1444+ 
1445+```
1446+ 
1447+```c
1448+uint32_t EsSetInt64AttrForGraph(EsCGraphBuilder *graph, const char *attr_name, int64_t value);
1449+uint32_t EsSetStringAttrForGraph(EsCGraphBuilder *graph, const char *attr_name, const char *value);
1450+uint32_t EsSetBoolAttrForGraph(EsCGraphBuilder *graph, const char *attr_name, bool value);
1451+ 
1452+uint32_t EsSetInt64AttrForTensor(EsCTensorHolder *tensor, const char *attr_name, int64_t value);
1453+uint32_t EsSetStringAttrForTensor(EsCTensorHolder *tensor, const char *attr_name, const char *value);
1454+uint32_t EsSetBoolAttrForTensor(EsCTensorHolder *tensor, const char *attr_name, bool value);
1455+ 
1456+uint32_t EsSetInt64AttrForNode(EsCTensorHolder *tensor, const char *attr_name, int64_t value);
1457+uint32_t EsSetStringAttrForNode(EsCTensorHolder *tensor, const char *attr_name, const char *value);
1458+uint32_t EsSetBoolAttrForNode(EsCTensorHolder *tensor, const char *attr_name, bool value);
1459+```
1460+ 
1461+```python
1462+# 封装EsTensorHolder和EsGraphBuilder的python类,提供方法进行设置
1463+ 
1464+```
1465+ 
1466+3. 上下文管理器的方式设置(目前仅 Python 支持,并且只支持对 node 设置属性)
1467+ 
1468+```python
1469+@contextlib.contextmanager
1470+def attr_scope(attr_maps):
1471+ # 获取当前属性并合并新属性
1472+ current_attrs = getattr(local_variable, "custom_node_attrs", {})
1473+ new_attrs = {**current_attrs, **attr_maps} # 合并字典
1474+ 
1475+ try:
1476+ setattr(local_variable, "custom_node_attrs", new_attrs)
1477+ yield
1478+ finally:
1479+ # 恢复为进入上下文前的状态
1480+ setattr(local_variable, "custom_node_attrs", current_attrs)
1481+ 
1482+ 
1483+# 使用方
1484+with attr_scope({"key": "value"}):
1485+ # 在这个上下文中,custom_node_attrs被设置为{"key": "value"}
1486+ create_nodes1_with_attrs() # get然后设置到此处产生的nodes1上
1487+ with attr_scope({"key1": "value1"}):
1488+ # 在这个上下文中,custom_node_attrs被设置为{"key": "value", "key1": "value1"}
1489+ create_nodes2_with_attrs() # get然后设置到此处产生的nodes2上
1490+ # 退出后,custom_node_attrs自动恢复为{"key": "value"}
1491+# 退出后,custom_node_attrs自动恢复为空字典
1492+```
1493+ 
1494+4. API 添加参数来传递可选私有属性(仅 node 级别的属性设置如下)
1495+ 
1496+```C
1497+extern "C" {
1498+EsCTensorHolder* EsRelu(EsCTensorHolder* x, const char* types, const char* name, ...) {
1499+// 省略构造节点代码
1500+ va_list args;
1501+ for (int i = 0; types[i] != '\0'; i++) {
1502+ switch (types[i]) {
1503+ case 'i': // 整数
1504+ printf("%d ", va_arg(args, int));
1505+ y->GetProducer()->SetAttr(name[i], va_arg(args, int)); //内部调用GNode的能力
1506+ break;
1507+ case 's': // 字符串
1508+ printf("%s ", va_arg(args, char*));
1509+ y->GetProducer()->SetAttr(name[i], va_arg(args, char*));
1510+ break;
1511+ // 其他类型
1512+ }
1513+ }
1514+}
1515+}
1516+```
1517+ 
1518+```C++
1519+namespace ge {
1520+namespace es {
1521+EsTensorHolder Relu(EsCTensorHolder &x, std::map<std::AscendString, ge::AttrValue> custom_attrs = {
1522+}) {
1523+// 省略构造节点代码
1524+ for (const auto& pair : custom_attrs) {
1525+ y->GetProducer()->SetAttr(pair.first, pair.second); //内部调用GNode的能力
1526+ }
1527+}
1528+}
1529+}
1530+```
1531+ 
1532+```python
1533+# es_relu.py
1534+def Relu(x: TensorHolder, custom_attrs: Optional[Dict[str, Any]] = None) -> TensorHolder:
1535+ # 构建类型字符串和值列表
1536+ types_str = ""
1537+ values = []
1538+ names_str = ""
1539+ 
1540+ for key, value in custom_attrs.items():
1541+ if isinstance(value, int):
1542+ types_str += 'i'
1543+ values.append(value)
1544+ elif isinstance(value, str):
1545+ types_str += 's'
1546+ values.append(value.encode('utf-8'))
1547+ # 添加其他类型处理...
1548+ names_str += key + '\0'
1549+ 
1550+ # 调用 C 函数
1551+ result_ptr = _lib.EsRelu(
1552+ x._as_parameter_,
1553+ types_str.encode('utf-8'),
1554+ names_str.encode('utf-8'),
1555+ *values # 展开值列表
1556+ )
1557+```
1558+ 
1559+从以下几个维度来比对上面几种构图方式:
1560+ 
1561+| | 基于现有的基础类设置属性接口进行设置 | 基于 EsGraphBuilder 和 EsTensorHolder 封装的接口进行设置 | 上下文管理器的方式设置 | API 添加参数来传递可选私有属性 |
1562+| ----- | ------------------------- | ---------------------------------------- | ---------------------------------- | ---------------------------- |
1563+| 易用性 | 3 星(调用构图 API 之后,基于返回对象进行后处理) | 3 星(调用构图 API 之后,基于返回对象进行后处理) | 3.5 星(批处理和嵌套场景优势巨大);但是 C++ 的构图写法会比较繁琐 | 2.5 星(参数构造比较麻烦) |
1564+| 防呆性 | 3 星(提供了 GNode 的获取方法,用户可以魔改) | 3.5 星(有后处理,但是后处理是我们 ES 提供的固定 API,可控) | 4 星(API 内部获取上下文信息搞定属性设置,无任何后处理) | 4 星(API 内部获取上下文信息搞定属性设置,无任何后处理) |
1565+| 功能完备性 | 3 星(C 不支持) | 5 星 | 3 星(C 支持困难) | 5 星 |
1566+ 
1567+我们的策略做一个能力的并集:
1568+ 
1569+1. 提供获取 GNode、Graph 的能力,供 ES 构图可以切换到基于现有的基础类设置属性接口进行设置
1570+2. 基于 EsGraphBuilder 和 EsTensorHolder 封装的接口进行设置,便于 C 构图的人或者不了解之前基础类的人更好使用
1571+3. Python 语言结合自身的语言特点,可以提供语法糖的更高层封装,也就是上下文管理器的方式设置来更好的设置
1572+ 
1573+ 
1574+### `EsCGraphBuilder` 中的生命周期管理
1575+ 
1576+算子内部创建的 `Node`、算子接口返回的动态输出、以及用户通过入参传入的 `Tensor` 属性与子图,在 `EsCGraphBuilder` 内部统一通过 `std::list<std::unique_ptr<ResourceHolder>> resource_holder_` 结构管理,具体结构如下:
1577+ 
1578+```c++
1579+ /**
1580+ * 资源管理struct
1581+ * resource_ptr_ 资源指针
1582+ * deleter_ 析构函数
1583+ */
1584+ struct ResourceHolder{
1585+ void *resource_ptr_;
1586+ std::function<void(void*)> deleter_;
1587+ ResourceHolder(void *resource_ptr, std::function<void(void*)> deleter) :
1588+ resource_ptr_(resource_ptr), deleter_(std::move(deleter)) {}
1589+ ~ResourceHolder() {
1590+ if (resource_ptr_ != nullptr) {
1591+ deleter_(resource_ptr_);
1592+ }
1593+ }
1594+ };
1595+ std::list<std::unique_ptr<ResourceHolder>> resource_holder_;
1596+```
1597+ 
1598+目前依赖于该结构管理的有:
1599+ 
1600+- 用户传入接口的 `Tensor` 属性
1601+ 
1602+- 接口返回的 `EsCTensorHolder`
1603+ 
1604+- 接口的动态输出返回值
1605+ 
1606+- 用户传入接口的子图
1607+ 
1608+相关的实例的生命周期会转移给 `EsCGraphBuilder`,并跟随 `EsCGraphBuilder` 的析构而释放持有的内存。
1609+ 
1610+### 控制子图相关设计说明
1611+ 
1612+#### 控制子图依赖的 `MetaDef` 新增接口
1613+ 
1614+为适配 ES 构图中子图构建与连边等逻辑,在 `graph.h``gnode.h` 新增接口:
1615+ 
1616+`graph.h`
1617+ 
1618+```c++
1619+ /**
1620+ * @brief Find the GNode with the target node_name in the graph
1621+ * @param node_name GNode name
1622+ * @return GNodePtr GNode pointer in the graph, return nullptr if failed
1623+ */
1624+ GNodePtr FindNodeByName(const AscendString &node_name) const;
1625+ 
1626+ /**
1627+ * @brief Get the parent graph of current sub graph
1628+ * @return ConstGraphPtr The parent graph shared pointer of current graph, return nullptr if failed
1629+ */
1630+ ConstGraphPtr GetParentGraph() const;
1631+ 
1632+ /**
1633+ * @brief Get the parent node of current sub graph
1634+ * @return GNodePtr The parent node shared pointer of current graph, return nullptr if failed
1635+ */
1636+ GNodePtr GetParentNode() const;
1637+```
1638+ 
1639+`gnode.h`
1640+ 
1641+```c++
1642+ /**
1643+ * @brief Add the subgraph to the node
1644+ * @param subgraph_ir_name IR subgraph name
1645+ * @param subgraph the subgraph to be added
1646+ * @return GRAPH_SUCCESS: success, others: failed
1647+ */
1648+ graphStatus SetSubgraph(const AscendString &subgraph_ir_name, const Graph &subgraph);
1649+ 
1650+ /**
1651+ * @brief Add subgraphs to the node
1652+ * @param subgraph_ir_name Dynamic IR subgraphs name
1653+ * @param subgraphs subgraphs to be added
1654+ * @return GRAPH_SUCCESS: success, others: failed
1655+ */
1656+ graphStatus SetSubgraphs(const AscendString &subgraph_ir_name, const std::vector<Graph> &subgraphs);
1657+```
1658+ 
1659+### ES 部分复杂属性说明
1660+ 
1661+算子属性映射关系已在上文进行描述,本章节仅对部分复杂属性进行说明
1662+ 
1663+#### ListType
1664+ 
1665+IR 算子属性 `VT_LIST_DATA_TYPE` 对应算子类型 `ListType`,依赖 IR 类型 `ge::DataType`,在用户可感知该属性时,按照如 `VT_LIST_INT` 等其他 list 类型的已适配属性方式处理,对于 C 类型接口,需要转换为 `C_DataType`
1666+ 
1667+在代码生成后,用户使用时参考如`VT_LIST_INT`类型进行使用即可。
1668+ 
1669+##### 举例
1670+ 
1671+设有算子`Foo`,包含一个输入`x`以及一个`ListType`类型可选属性`a1`如下:
1672+ 
1673+```C++
1674+REG_OP(Foo)
1675+ .INPUT(x)
1676+ .OUTPUT(y)
1677+ .ATTR(a1, ListType, {});
1678+```
1679+ 
1680+转换为`C API`为:
1681+ 
1682+```C
1683+EsCTensorHolder Foo(EsCTensorHolder *x,
1684+ const C_DataType *a1,
1685+ int64_t a1_size);
1686+```
1687+ 
1688+转换为`C++ API`为:
1689+ 
1690+```C++
1691+namespace es {
1692+EsTensorHolder Foo(const EsTensorHolder &x,
1693+ const std::vector<ge::DataType> &a1 = {});
1694+}
1695+```
1696+ 
1697+#### ListListInt
1698+ 
1699+对于`C++`接口,直接使用`vector`格式形参:
1700+ 
1701+```c++
1702+// C++接口形参
1703+...std::vector<std::vector<int64_t>> &input_list...
1704+```
1705+ 
1706+**因 C 语言不支持 `vector` 等库函数,无法直接使用上述类型形参。**
1707+ 
1708+对于 C 语言接口,处理方式有两种:
1709+ 
1710+1. 在 C 语言接口中,将 `std::vector<int64_t>` 转换为 `Struct` 结构(参考 `output` 构造方式),之后将 `VT_LIST_LIST_INT` 转换为 `list of struct`
1711+
1712+ ```c++
1713+ // C语言接口生成的结构体代码
1714+ typedef struct {
1715+ int64_t* value;
1716+ int64_t size;
1717+ } EsListInt;
1718+ // C语言接口形参
1719+ ...EsListListInt *input_list, int64_t input_list_size...
1720+ ```
1721+
1722+ 之后在函数声明与内部实现时适配对应逻辑。
1723+ 
1724+2. 将多层 `vector` 类型形参拆分为三部分:对应类型的二级指针,外层 `list` 大小,各内部 `list` 大小:
1725+
1726+ ```c++
1727+ ...
1728+ const int64_t **attr_name,
1729+ int64_t outer_size,
1730+ const int64_t *inner_size,
1731+ ...
1732+ ```
1733+
1734+ 之后在内部生成double pointer与vector转换等逻辑。
1735+ 
1736+为使接口清晰便于使用,同时减少形参数量,**目前采取第二种方式**
1737+ 
1738+##### 举例
1739+ 
1740+设有算子`Foo`,包含一个输入`x`以及一个`ListListInt`类型可选属性`a1`如下:
1741+ 
1742+```C++
1743+REG_OP(Foo)
1744+ .INPUT(x)
1745+ .OUTPUT(y)
1746+ .ATTR(a1, ListListInt, {{}, {}});
1747+```
1748+ 
1749+转换为`C API`为:
1750+ 
1751+```C
1752+EsCTensorHolder Foo(EsCTensorHolder *x,
1753+ const int64_t **a1,
1754+ int64_t a1_size,
1755+ const int64_t *a1_inner_size);
1756+```
1757+ 
1758+转换为`C++ API`为:
1759+ 
1760+```C++
1761+namespace es {
1762+EsTensorHolder Foo(const EsTensorHolder &x,
1763+ const std::vector<std::vector<int64_t>> &a1 = {{}, {}});
1764+}
1765+```
1766+ 
1767+#### Tensor
1768+ 
1769+与非`List`属性类似,区别为`Tensor`类型属性入参在传入后,其生命周期会被转移给算子对应的`EsCGraphBuilder`进行管理,用户不应在传入`Tensor`类型属性后再对传入的入参进行操作。
1770+ 
1771+> [!CAUTION]
1772+>
1773+> 对于`Tensor`类型的属性, 目前仅支持`Tensor()`一种默认值。
1774+ 
1775+对于C++接口用户,可以直接传入`ge::Tensor`类型的属性;而对于C接口用户,ES会提供接创建匿名指针`EsCTensor *`的接口作为C接口形式的`Tensor`类型属性指针。
1776+ 
1777+`C/C++`接口的`Tensor`类型属性生命周期都会被转移给`EsCGraphBuilder`进行管理。
1778+ 
1779+> [!Note]
1780+>
1781+> 对于C++接口传入的`ge::Tensor`属性,在内部处理时会将其转换为`EsCTensor`类型之后传递给C接口,用户不感知该转换。
1782+ 
1783+##### 举例
1784+ 
1785+设有算子`Foo`,包含一个输入`x`以及一个`Tensor`类型可选属性`a1`如下:
1786+ 
1787+```C++
1788+REG_OP(Foo)
1789+ .INPUT(x)
1790+ .OUTPUT(y)
1791+ .ATTR(a1, Tensor, Tensor());
1792+```
1793+ 
1794+转换为`C API`为:
1795+ 
1796+```C
1797+EsCTensorHolder Foo(EsCTensorHolder *x,
1798+ EsCTensor *a1);
1799+```
1800+ 
1801+转换为`C++ API`为:
1802+ 
1803+```C++
1804+namespace es {
1805+EsTensorHolder Foo(const EsTensorHolder &x,
1806+ std::unique_ptr<ge::Tensor> a1=std::make_unique<ge::Tensor>(ge::Tensor()));
1807+}
1808+```
1809+ 
1810+#### ListString
1811+ 
1812+对于`C++`接口中的`String`类型来说,**因不同GCC版本`std::string`对应的符号可能不一致**,因此需要使用`const char *`替代`std::string`,形参构造为:
1813+ 
1814+```c++
1815+...std::vector<char *> input_list...
1816+```
1817+ 
1818+对于C语言接口,则直接使用
1819+ 
1820+```c
1821+...const char **input_list...
1822+```
1823+ 
1824+##### 举例
1825+ 
1826+设有算子`Foo`,包含一个输入`x`以及一个`ListString`类型可选属性`a1`如下:
1827+ 
1828+```C++
1829+REG_OP(Foo)
1830+ .INPUT(x)
1831+ .OUTPUT(y)
1832+ .ATTR(a1, ListString, {});
1833+```
1834+ 
1835+转换为`C API`为:
1836+ 
1837+```C
1838+EsCTensorHolder Foo(EsCTensorHolder *x,
1839+ const char **a1, // 因AscendString包含char *的构造函数,不需要传入ListString内部每个string对应char *的长度
1840+ const int64_t a1_size);
1841+```
1842+ 
1843+转换为`C++ API`为:
1844+ 
1845+```C++
1846+namespace es {
1847+EsTensorHolder Foo(const EsTensorHolder &x,
1848+ const std::vector<const char *> &a1 = {});
1849+}
1850+```
1851+ 
1852+## 附录
1853+ 
1854+### V1 控制算子不生成 ES API
1855+ 
1856+当前 ES 构图逻辑不包含 V1 控制算子:
1857+ 
1858+| V1 控制算子 |
1859+| ------------- |
1860+| Switch |
1861+| StreamSwitch |
1862+| Merge |
1863+| StreamMerge |
1864+| Enter |
1865+| Exit |
1866+| LoopCond |
1867+| NextIteration |
1868+ 
1869+### `Variable` 算子因已提供 `C/C++` 接口,不再生成算子
1870+ 
1871+| 已有 C/C++ 接口的算子 |
1872+|--------------|
1873+| Variable |
1874+ 
1875+### 方案探讨:通过多版本函数名(如 `FooV2`)保持兼容性
1876+ 
1877+当算子原型发生兼容性扩展(如新增可选输入或属性)时,由于 `C` 语言不支持函数重载或默认参数,无法在同一函数签名下表达接口变化。此时,一种常见但问题较多的做法是通过函数名加版本后缀(如 `esFooV2`)来区分 API
1878+版本,以规避签名不兼容问题。例如:
1879+ 
1880+```
1881+cCopyEdit// v1 版本 API
1882+Tensor *esFoo(const Tensor *x);
1883+ 
1884+// v2 版本新增可选输入 xo
1885+Tensor *esFooV2(const Tensor *x, const Tensor *xo);
1886+```
1887+ 
1888+该方案虽然在表面上保留了旧接口,但在实际工程中存在明显缺陷:
1889+ 
1890+**1. 语义混淆,命名不直观**
1891+ 
1892+`esFooV2` 易被误解为一个新的算子,而非 `Foo` 的扩展版本。这种命名方式难以准确传达“同一操作的演进版本”,不利于用户形成统一的 API 认知。
1893+ 
1894+**2. 多语言风格割裂**
1895+ 
1896+`C++``Python` 支持默认参数与函数重载,可自然表达接口演进,无需区分多个函数名。若仅在 `C` 层引入版本后缀,将破坏多语言接口风格的一致性,影响用户体验。
1897+ 
1898+**3. 无法向前兼容,链接脆弱**
1899+ 
1900+即使仅使用 `esFooV2` 的兼容参数(如不传 `xo`),只要函数签名发生变化,在旧版本运行环境中仍可能因符号缺失导致链接失败。该方案仅满足向后兼容,无法保障前向兼容性。
1901+ 
1902+**4. 接口膨胀,维护成本高**
1903+ 
1904+每次接口演进都需新增一组函数名,带来额外的文档、测试、封装和工具链负担。长期来看,易导致命名空间膨胀和维护难度上升。
1905+ 
1906+------
1907+ 
1908+基于 `C` 语言在表达能力上的天然局限,构图接口很难同时实现完美的向前和向后兼容。`C` 接口的存在一方面是为了能力完备,另一方面也是为习惯或确有需求的用户提供选择。实际使用中,我们更推荐用户优先使用 `C++``Python`
1909+构图接口,它们能够更优雅地支持接口演进和版本兼容。
1910+ 
1911+### 关于浮点类型的可选属性判断
1912+ 
1913+由于浮点数在计算机中无法精确表达,`es` 在判断**可选浮点属性是否被显式配置**时可能遇到精度误差问题:用户传入的值与 `IR` 定义的默认值在语义上相等,但在数值表示上存在极小差异,导致误判为“已配置”。
1914+ 
1915+为解决该问题,存在两种策略:
1916+ 
1917+1. **容差判断(推荐方案)**
1918+ 使用绝对误差容差进行比较:若传入值与默认值之间的差异在指定容差范围内(如 `1e-5`)则视为相等。该方案是浮点比较中的通用策略,易于实现,用户体验友好。
1919+2. **字符串比较(理论方案)**
1920+ 在构图 API 中要求用户以字符串形式传入浮点值,同时在 `IR` 中保存默认值的字符串表示。通过字符串做精确匹配以判断是否“配置过”。
1921+ 
1922+尽管方案 2 更严谨,但它会显著降低 API 直观性——浮点属性需以字符串形式传入,与类型语义不符。相比之下,方案 1 在大多数实际场景下误判概率极低,即使误判,由于在容差范围内,也不应该对算子行为产生实质性影响。因此,`es`
1923+当下采用方案 1 。
1924+ 
1925+### 子图内外index映射关系表达
1926+ 
1927+携带子图的算子,算子的实例化后,通过在子图内的`Data``NetOutput`标记信息来映射到算子的输入输出上; 具体来说:
1928+ 
1929+1. `Data`节点上按照创建时指定的`index`表示对应于算子的第几个输入; 实际含义是子图内第N个`Data`节点对应数据源头是算子的第N个输入数据;
1930+ `Data`节点的个数代表子图的输入个数,子图的输入个数应该小于等于算子的实际输入个数
1931+2. `NetOutput`的输入顺序表示对应算子的输出,实际含义是算子的第N个输出对应的数据源头是子图内`NetOutput`的第N个输入数据; 子图成图时保证了子图内只有一个`NetOutput`
1932+ 节点,其输入个数代表了子图的输出个数,运行时有可能作为算子执行逻辑表达载体的子图,其输出个数应当跟算子的输出个数保持一致
1933+ 
1934+### generate_es_package.cmake依赖关系说明
1935+ 
1936+```
1937+用户应用 (my_app)
1938+
1939+ └─> target_link_libraries(PRIVATE es_math) # 用户调用
1940+
1941+
1942+ ┌──────────────────────────────────────┐
1943+ │ es_math (INTERFACE library) │ ← 对外接口
1944+ │ - 不生成任何构建产物 │
1945+ │ - 纯粹的依赖和属性传递 │
1946+ └──────────────────────────────────────┘
1947+
1948+ ├─> add_dependencies(build_es_math) # 触发智能构建
1949+ │ │
1950+ │ ▼
1951+ │ ┌─────────────────────────────────┐
1952+ │ │ build_es_math (custom_target) │ ← 智能构建协调器
1953+ │ │ - 执行 smart_build.cmake 脚本 │
1954+ │ └─────────────────────────────────┘
1955+ │ │
1956+ │ ├─> Step 1: make install_es_math (首次构建)
1957+ │ │ │
1958+ │ │ └─> install_es_math → es_math_so → generate_es_math_code
1959+ │ │ │ │
1960+ │ │ │ └─> gen_esb (生成代码)
1961+ │ │ │
1962+ │ │ └─> 编译 placeholder.cpp
1963+ │ │
1964+ │ ├─> Step 2: 检查是否生成了真实代码
1965+ │ │ └─> GLOB *.cpp (排除 placeholder.cpp)
1966+ │ │
1967+ │ └─> Step 3 (如果有真实代码): cmake . && make install_es_math
1968+ │ └─> 重新配置 + 重新编译真实源文件
1969+
1970+ └─> target_link_libraries(INTERFACE es_math_imported) # 链接到IMPORTED library,主进程链接时使用IMPORTED library 不可构建,因此主进程不会触发es_math_so的构建避免了主进程和子进程同时构建内部es_math_so的竞态问题
1971+
1972+
1973+ ┌────────────────────────────────────┐
1974+ │ es_math_so (SHARED library) │ ← 实际 .so 文件
1975+ │ - 产物: libes_math.so │
1976+ │ - 源文件: GLOB *.cpp (动态) │
1977+ └────────────────────────────────────┘
1978+
1979+ └─> add_dependencies(generate_es_math_code)
1980+
1981+
1982+ ┌──────────────────────────────────────┐
1983+ │ generate_es_math_code (ALL target) │
1984+ │ - add_custom_command 生成代码 │
1985+ └──────────────────────────────────────┘
1986+
1987+ ├─> DEPENDS: opgraph_math (原型库)
1988+
1989+ └─> COMMAND: bash run_gen_esb_with_lock.sh
1990+
1991+ └─> 执行 gen_esb (带文件锁)
1992+```
@@ -0,0 +1,4 @@
1+<?xml version="1.0" standalone="no"?>
2+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 729 676.5" width="729" height="676.5"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
4+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="729" height="676.5" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(14.5 10) rotate(0 165 86.5)"><path d="M32 0 C85.41 0.22, 139.35 1.43, 298 0 M32 0 C108.53 -1.12, 184.56 -2.38, 298 0 M298 0 C318.75 -1.04, 328.47 11.03, 330 32 M298 0 C321.23 0.01, 330.75 8.91, 330 32 M330 32 C330.16 75.26, 328.73 116.64, 330 141 M330 32 C330.86 63.56, 330.12 93.83, 330 141 M330 141 C330.65 164.2, 321.01 174.12, 298 173 M330 141 C330.87 163.38, 321.08 174.06, 298 173 M298 173 C210.87 172.38, 122.84 174.39, 32 173 M298 173 C243.57 172.06, 189.74 172.35, 32 173 M32 173 C12.12 174.44, -0.34 161.79, 0 141 M32 173 C11.9 172.33, -2.24 162.67, 0 141 M0 141 C-0.41 107.15, 0.55 72.95, 0 32 M0 141 C-0.02 99.16, -0.69 59.11, 0 32 M0 32 C0.52 8.82, 11.94 -1.54, 32 0 M0 32 C0.63 12.15, 8.66 -1, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(77.5 33) rotate(0 102.28333282470703 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">APP bin (C/C++ API)</text></g><g stroke-linecap="round" transform="translate(54.5 91) rotate(0 76 34)"><path d="M17 0 C46.22 0.09, 77.07 1.12, 135 0 C144.69 -1.41, 149.45 6.54, 152 17 C153.29 27.8, 153.65 37.28, 152 51 C151.89 61.61, 143.37 67.84, 135 68 C92.44 66.95, 45.03 64.74, 17 68 C8.46 70.97, -3.09 59.47, 0 51 C-0.54 39.97, 2.16 21.46, 0 17 C-2.59 3.54, 2.94 -3.33, 17 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M17 0 C53.62 -1.63, 86.71 -2.47, 135 0 M17 0 C48.59 -1.37, 80.25 -0.64, 135 0 M135 0 C146.22 -0.63, 152.31 3.8, 152 17 M135 0 C148.07 -0.08, 152.18 6.11, 152 17 M152 17 C153.17 28.98, 151.13 37.21, 152 51 M152 17 C151.56 28.7, 152.53 37.88, 152 51 M152 51 C150.78 63.12, 145.04 68.39, 135 68 M152 51 C149.98 64.35, 147.27 70.06, 135 68 M135 68 C94.08 70.35, 48.4 68.88, 17 68 M135 68 C88.73 67.83, 41.18 67.68, 17 68 M17 68 C5.95 68.44, 1.64 63.19, 0 51 M17 68 C7.53 66.77, 1.35 61.26, 0 51 M0 51 C-0.21 42.73, -0.45 33.99, 0 17 M0 51 C0.18 38.98, -0.21 27.58, 0 17 M0 17 C-1.39 5.57, 7.47 0.41, 17 0 M0 17 C-0.34 7.65, 5.27 -0.1, 17 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(95.40833282470703 112.5) rotate(0 35.09166717529297 12.5)"><text x="35.09166717529297" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libesb.a</text></g><g stroke-linecap="round" transform="translate(10 214.49999999999994) rotate(0 354.5 226.00000000000003)"><path d="M32 0 C188.13 1.08, 343.18 0.77, 677 0 M32 0 C184.39 -1.36, 336.8 -1.02, 677 0 M677 0 C699.93 -0.65, 707.44 11.48, 709 32 M677 0 C699.59 -0.78, 707.74 11.05, 709 32 M709 32 C707.27 132.13, 709.11 231.54, 709 420 M709 32 C709.72 167.05, 709.54 302.32, 709 420 M709 420 C709.68 440.34, 697.91 453.78, 677 452 M709 420 C708.26 440.86, 699.57 449.93, 677 452 M677 452 C475.64 453.95, 275.46 454.72, 32 452 M677 452 C424.64 452.1, 172.32 452.26, 32 452 M32 452 C10.19 453.43, -0.18 439.9, 0 420 M32 452 C9.76 450.77, 1.51 439.91, 0 420 M0 420 C0.38 329.89, 0.82 241.54, 0 32 M0 420 C0.81 279.37, 0.26 139.23, 0 32 M0 32 C0.8 9.89, 11.96 -1.9, 32 0 M0 32 C-0.92 11.38, 12.41 1.97, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(346.5 239) rotate(0 25.08333396911621 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">CANN</text></g><g stroke-linecap="round" transform="translate(76 565.25) rotate(0 298 34)"><path d="M17 0 C183.85 1.28, 352.17 0.88, 579 0 C590.19 3.59, 597 4.57, 596 17 C594.35 24.76, 595.71 32.17, 596 51 C598.05 63.09, 587.37 68.89, 579 68 C458.8 71.24, 336.51 70.6, 17 68 C7.85 70.02, 0.98 63.81, 0 51 C2.28 38.83, -0.45 26.85, 0 17 C0.81 2.87, 6.07 -2.49, 17 0" stroke="none" stroke-width="0" fill="#a5d8ff"></path><path d="M17 0 C219.83 1.42, 422.05 1.13, 579 0 M17 0 C233.86 -0.16, 450.37 0.02, 579 0 M579 0 C589.48 -0.21, 597.42 3.99, 596 17 M579 0 C589.76 0.8, 594.62 6.76, 596 17 M596 17 C594.01 26.94, 595.15 31.11, 596 51 M596 17 C595.56 30.12, 595.64 40.54, 596 51 M596 51 C596.93 63.3, 590.35 67.19, 579 68 M596 51 C596.8 62.91, 592.56 66.12, 579 68 M579 68 C458.62 65.57, 338.15 65.78, 17 68 M579 68 C365.05 69.86, 150.21 69.94, 17 68 M17 68 C6.68 68.04, 0.95 61.9, 0 51 M17 68 C7.41 70.1, -1.76 61.72, 0 51 M0 51 C-0.96 44.89, -1.63 33.34, 0 17 M0 51 C-0.02 42.9, -0.03 34.2, 0 17 M0 17 C-0.21 6.41, 5.6 -0.95, 17 0 M0 17 C-2.18 5.72, 5.66 1.62, 17 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(323.5250015258789 586.75) rotate(0 50.474998474121094 12.5)"><text x="50.474998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libgraph.so</text></g><g stroke-linecap="round" transform="translate(383 13.75) rotate(0 165 86.5)"><path d="M32 0 C101.8 -0.04, 173.09 -1.06, 298 0 M32 0 C124.45 -1.14, 217.32 -1.51, 298 0 M298 0 C320.52 -0.49, 330.07 12.24, 330 32 M298 0 C318.62 -1.77, 331.11 10.06, 330 32 M330 32 C330.13 59.76, 330.45 90.7, 330 141 M330 32 C329.34 69.71, 329.5 106.84, 330 141 M330 141 C330.01 161.54, 318.47 173.9, 298 173 M330 141 C330.32 163.22, 320.58 174.4, 298 173 M298 173 C199.69 170.2, 97.02 171.88, 32 173 M298 173 C241.5 171.52, 185.42 172.77, 32 173 M32 173 C10.02 173.88, 0.35 163.19, 0 141 M32 173 C9.49 175.24, -0.14 161.81, 0 141 M0 141 C-0.76 100.52, -1.37 59.23, 0 32 M0 141 C0.33 110.17, 1.25 78.83, 0 32 M0 32 C-1.54 8.92, 9.22 -1.23, 32 0 M0 32 C-1.19 9.43, 11.3 1.01, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(456.91666412353516 87.75) rotate(0 91.08333587646484 12.5)"><text x="91.08333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">APP (Python API)</text></g><g stroke-linecap="round" transform="translate(420.0000000000001 297.2500000000001) rotate(0 99.49999999999994 120.5)"><path d="M32 0 C73.23 -1.2, 114.74 -2.07, 167 0 M32 0 C78.28 1.22, 123.7 -0.62, 167 0 M167 0 C190.27 1.1, 200.4 10.84, 199 32 M167 0 C189.14 1.75, 197.43 9.1, 199 32 M199 32 C197.6 78.39, 199.95 127.93, 199 209 M199 32 C198.45 94.25, 198.1 158.79, 199 209 M199 209 C197.15 231.38, 188.63 240.85, 167 241 M199 209 C200.18 228.22, 190.44 243, 167 241 M167 241 C131.18 241.99, 95.74 240.82, 32 241 M167 241 C121.04 239.62, 77.25 239.53, 32 241 M32 241 C10.58 241.21, 1.26 228.52, 0 209 M32 241 C12.48 239.73, 0.3 230.55, 0 209 M0 209 C-0.03 162.97, -0.23 119.19, 0 32 M0 209 C-0.42 145.84, 0.12 82.81, 0 32 M0 32 C1.6 10.41, 8.8 -1.93, 32 0 M0 32 C0.84 11.03, 10.52 -2.07, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(449 449.25) rotate(0 76 34)"><path d="M17 0 C41.88 -1.26, 69.31 0.28, 135 0 C143.47 2.41, 154.56 4.94, 152 17 C150.36 25.43, 150.31 36.81, 152 51 C152.41 63.55, 142.81 67.85, 135 68 C99.43 67.03, 70.5 66.24, 17 68 C2.75 67.35, -1.76 59.54, 0 51 C-2.95 36.5, 1.67 26.19, 0 17 C-1.53 3.47, 5.47 -2.26, 17 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M17 0 C56.5 -1.49, 95.34 1.07, 135 0 M17 0 C48.82 -0.15, 79.65 -0.44, 135 0 M135 0 C147.65 -0.16, 150.35 3.82, 152 17 M135 0 C144.13 1.63, 150.72 7.62, 152 17 M152 17 C151.63 23.13, 153.54 32.08, 152 51 M152 17 C151.75 27.71, 151.77 38.63, 152 51 M152 51 C151.14 61.82, 144.91 69.22, 135 68 M152 51 C153.61 63.27, 145.62 67.41, 135 68 M135 68 C108.33 69.28, 79.84 69.54, 17 68 M135 68 C90.65 67.81, 45.17 67.84, 17 68 M17 68 C7.36 66.5, -1.06 62.47, 0 51 M17 68 C4.13 66.86, 2.09 60.8, 0 51 M0 51 C-1.95 37.32, -1.35 26.47, 0 17 M0 51 C1.12 38.82, -0.28 27.52, 0 17 M0 17 C-1.38 7.31, 4.65 -1.92, 17 0 M0 17 C-0.91 6.43, 4.85 -1.8, 17 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(489.90833282470703 470.75) rotate(0 35.09166717529297 12.5)"><text x="35.09166717529297" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libesb.a</text></g><g stroke-linecap="round" transform="translate(451 370.25) rotate(0 76 34)"><path d="M17 0 C37.19 0.38, 64.8 2.22, 135 0 C147.59 2.1, 150.32 6.72, 152 17 C154.66 30.04, 152.16 43.01, 152 51 C151.3 60.44, 143.25 71.48, 135 68 C106.51 69.45, 73.97 65.27, 17 68 C7.17 67.83, 2.95 61.76, 0 51 C1.19 46.21, -1.27 36.51, 0 17 C-1.86 3.76, 4 -2.2, 17 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M17 0 C45.63 0.16, 73.02 -1.35, 135 0 M17 0 C48.72 0.92, 77.85 1.02, 135 0 M135 0 C146.12 -0.48, 152.76 4.39, 152 17 M135 0 C146.7 -2.13, 152.71 7.95, 152 17 M152 17 C153.22 22.84, 151.79 29.34, 152 51 M152 17 C152.73 27.16, 152.5 36.92, 152 51 M152 51 C152.83 61.1, 145.54 69.97, 135 68 M152 51 C151.83 60.45, 147.77 68.89, 135 68 M135 68 C89.64 70.82, 42.59 68.15, 17 68 M135 68 C100.04 66.05, 65.39 66.57, 17 68 M17 68 C7.27 67.63, 1.71 62.35, 0 51 M17 68 C4.86 68.78, 0.42 61.1, 0 51 M0 51 C-0.89 44.56, -1.08 37.61, 0 17 M0 51 C0.15 43.94, -1.08 36.08, 0 17 M0 17 C1.57 7.02, 5.49 -0.78, 17 0 M0 17 C-0.73 3.99, 4.4 -1.3, 17 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(469.06666564941406 391.75) rotate(0 57.93333435058594 12.5)"><text x="57.93333435058594" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Python API</text></g><g transform="translate(523 314.25) rotate(0 16.350000381469727 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb</text></g><g mask="url(#mask-waOi_zxl2UusnX0bekiQb)" stroke-linecap="round"><g transform="translate(124 158.25) rotate(0 -1.5 197.5)"><path d="M1 0 C0.54 65.64, -1.47 328.36, -1.94 394.27 M0.07 -1.05 C-0.53 64.7, -1.99 329.69, -2.34 395.42" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(124 158.25) rotate(0 -1.5 197.5)"><path d="M-10.76 371.88 C-7.58 382.26, -5.68 391.07, -2.34 395.42 M-10.76 371.88 C-8.01 379.34, -5.2 386.74, -2.34 395.42" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(124 158.25) rotate(0 -1.5 197.5)"><path d="M6.34 371.97 C3.2 382.47, -1.22 391.24, -2.34 395.42 M6.34 371.97 C3.37 379.25, 0.46 386.63, -2.34 395.42" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-waOi_zxl2UusnX0bekiQb"><rect x="0" y="0" fill="#fff" width="227" height="653.25"></rect><rect x="55.98332977294922" y="343.25" fill="#000" width="133.03334045410156" height="25" opacity="1"></rect></mask><g transform="translate(55.98332977294922 343.25) rotate(0 67.34827941888943 12.18349805805832)"><text x="66.51667022705078" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Operator API</text></g><g mask="url(#mask-enNZv_jV-fVU8KVBrKZwF)" stroke-linecap="round"><g transform="translate(509 184.25) rotate(0 -1.5 90)"><path d="M-0.73 0.56 C-0.95 30.84, -1.7 150.81, -2.13 180.78 M1.09 -0.19 C0.86 29.84, -1.73 149.33, -2.62 179.06" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(509 184.25) rotate(0 -1.5 90)"><path d="M-10.58 155.37 C-7.97 162.39, -5.76 165.95, -2.62 179.06 M-10.58 155.37 C-8.57 162.56, -6.07 170.51, -2.62 179.06" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(509 184.25) rotate(0 -1.5 90)"><path d="M6.51 155.79 C5.14 162.61, 3.38 166.08, -2.62 179.06 M6.51 155.79 C2.86 162.91, -0.3 170.72, -2.62 179.06" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-enNZv_jV-fVU8KVBrKZwF"><rect x="0" y="0" fill="#fff" width="612" height="464.25"></rect><rect x="436.45833587646484" y="261.75" fill="#000" width="142.0833282470703" height="25" opacity="1"></rect></mask><g transform="translate(436.45833587646484 261.75) rotate(0 71.77682185139508 12.795652218814922)"><text x="71.04166412353516" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb python api</text></g></svg>
@@ -0,0 +1,2 @@
1+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 628 407.5" width="628" height="407.5"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
2+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="628" height="407.5" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(18.5 10) rotate(0 294 86.5)"><path d="M32 0 C137.18 0.34, 242.64 0.95, 556 0 M32 0 C181.82 -1.37, 331.39 -2.01, 556 0 M556 0 C576.75 -1.04, 586.47 11.03, 588 32 M556 0 C579.23 0.01, 588.75 8.91, 588 32 M588 32 C588.16 75.26, 586.73 116.64, 588 141 M588 32 C588.86 63.56, 588.12 93.83, 588 141 M588 141 C588.65 164.2, 579.01 174.12, 556 173 M588 141 C588.87 163.38, 579.08 174.06, 556 173 M556 173 C384.7 173.02, 212.94 174.05, 32 173 M556 173 C449.74 172.13, 343.79 172.28, 32 173 M32 173 C12.12 174.44, -0.34 161.79, 0 141 M32 173 C11.9 172.33, -2.24 162.67, 0 141 M0 141 C-0.41 107.15, 0.55 72.95, 0 32 M0 141 C-0.02 99.16, -0.69 59.11, 0 32 M0 32 C0.52 8.82, 11.94 -1.54, 32 0 M0 32 C0.63 12.15, 8.66 -1, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(291.5 38) rotate(0 37.974998474121094 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">APP bin</text></g><g stroke-linecap="round" transform="translate(70.5 91) rotate(0 76 34)"><path d="M17 0 C46.22 0.09, 77.07 1.12, 135 0 C144.69 -1.41, 149.45 6.54, 152 17 C153.29 27.8, 153.65 37.28, 152 51 C151.89 61.61, 143.37 67.84, 135 68 C92.44 66.95, 45.03 64.74, 17 68 C8.46 70.97, -3.09 59.47, 0 51 C-0.54 39.97, 2.16 21.46, 0 17 C-2.59 3.54, 2.94 -3.33, 17 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M17 0 C53.62 -1.63, 86.71 -2.47, 135 0 M17 0 C48.59 -1.37, 80.25 -0.64, 135 0 M135 0 C146.22 -0.63, 152.31 3.8, 152 17 M135 0 C148.07 -0.08, 152.18 6.11, 152 17 M152 17 C153.17 28.98, 151.13 37.21, 152 51 M152 17 C151.56 28.7, 152.53 37.88, 152 51 M152 51 C150.78 63.12, 145.04 68.39, 135 68 M152 51 C149.98 64.35, 147.27 70.06, 135 68 M135 68 C94.08 70.35, 48.4 68.88, 17 68 M135 68 C88.73 67.83, 41.18 67.68, 17 68 M17 68 C5.95 68.44, 1.64 63.19, 0 51 M17 68 C7.53 66.77, 1.35 61.26, 0 51 M0 51 C-0.21 42.73, -0.45 33.99, 0 17 M0 51 C0.18 38.98, -0.21 27.58, 0 17 M0 17 C-1.39 5.57, 7.47 0.41, 17 0 M0 17 C-0.34 7.65, 5.27 -0.1, 17 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(111.40833282470703 112.5) rotate(0 35.09166717529297 12.5)"><text x="35.09166717529297" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libesb.a</text></g><g stroke-linecap="round" transform="translate(10 222.5) rotate(0 304 87.5)"><path d="M32 0 C163.8 1, 294.52 0.68, 576 0 M32 0 C160.53 -1.14, 289.06 -0.8, 576 0 M576 0 C598.93 -0.65, 606.44 11.48, 608 32 M576 0 C598.59 -0.78, 606.74 11.05, 608 32 M608 32 C605.81 60.58, 608.94 87.94, 608 143 M608 32 C608.1 70.18, 607.78 108.72, 608 143 M608 143 C608.68 163.34, 596.91 176.78, 576 175 M608 143 C607.26 163.86, 598.57 172.93, 576 175 M576 175 C406.05 176.56, 237.28 177.32, 32 175 M576 175 C363.16 175.02, 150.36 175.19, 32 175 M32 175 C10.19 176.43, -0.18 162.9, 0 143 M32 175 C9.76 173.77, 1.51 162.91, 0 143 M0 143 C0.05 116.05, 0.8 92.12, 0 32 M0 143 C0.61 102.67, -0.34 63.19, 0 32 M0 32 C0.8 9.89, 11.96 -1.9, 32 0 M0 32 C-0.92 11.38, 12.41 1.97, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(301.5 242) rotate(0 25.08333396911621 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">CANN</text></g><g stroke-linecap="round" transform="translate(69.5 307) rotate(0 73 29)"><path d="M14.5 0 C45.87 0.59, 78.01 1.18, 131.5 0 M14.5 0 C51.15 -0.91, 85.38 -2.01, 131.5 0 M131.5 0 C142.34 0.43, 147.66 5.99, 146 14.5 M131.5 0 C142.56 -2.07, 145.69 4.18, 146 14.5 M146 14.5 C145.21 23.15, 144.34 34.51, 146 43.5 M146 14.5 C146.58 23.99, 145.68 32.29, 146 43.5 M146 43.5 C147.47 55.06, 142.36 56.87, 131.5 58 M146 43.5 C145.22 52.65, 139.64 57.91, 131.5 58 M131.5 58 C98 57.52, 59.58 57.08, 14.5 58 M131.5 58 C98.14 57.47, 65.53 58.06, 14.5 58 M14.5 58 C4.45 57.61, -1.74 53.95, 0 43.5 M14.5 58 C3.53 57.04, -0.01 52.05, 0 43.5 M0 43.5 C1.21 34.93, 0.5 30.87, 0 14.5 M0 43.5 C0.6 34.51, 0.43 25.69, 0 14.5 M0 14.5 C-1.52 5.23, 5.72 1.33, 14.5 0 M0 14.5 C-0.05 3.86, 5.79 0.71, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(92.0250015258789 323.5) rotate(0 50.474998474121094 12.5)"><text x="50.474998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libgraph.so</text></g><g stroke-linecap="round" transform="translate(237.5 305) rotate(0 73 29)"><path d="M14.5 0 C58.87 -2.02, 100.08 -1.96, 131.5 0 M14.5 0 C42.84 -0.73, 70.18 -1.11, 131.5 0 M131.5 0 C143.16 0.11, 144.11 3.01, 146 14.5 M131.5 0 C142.08 2.22, 145.29 7.13, 146 14.5 M146 14.5 C146.31 27.15, 147.03 33.98, 146 43.5 M146 14.5 C145.92 24.3, 146.41 34, 146 43.5 M146 43.5 C145.51 55, 141.76 58.3, 131.5 58 M146 43.5 C145.49 53.08, 142.92 58.66, 131.5 58 M131.5 58 C94.73 57.03, 56.76 57.73, 14.5 58 M131.5 58 C102.11 57.71, 73.84 57.42, 14.5 58 M14.5 58 C5.59 57.98, -1.69 54.82, 0 43.5 M14.5 58 C3.57 56.22, 0.3 52.77, 0 43.5 M0 43.5 C-1.32 32.77, -0.02 22.41, 0 14.5 M0 43.5 C0.17 37.93, -0.41 31.17, 0 14.5 M0 14.5 C0.03 6.32, 5.43 0.91, 14.5 0 M0 14.5 C-2.15 4.82, 6.92 -0.45, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(275.1666679382324 321.5) rotate(0 35.33333206176758 12.5)"><text x="35.33333206176758" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libge.so</text></g><g stroke-linecap="round" transform="translate(412.5 305) rotate(0 73 29)"><path d="M14.5 0 C55.96 -0.33, 94.34 -0.64, 131.5 0 M14.5 0 C58.65 -0.3, 102.74 -0.84, 131.5 0 M131.5 0 C142.21 0.89, 144.27 5.18, 146 14.5 M131.5 0 C140.46 -0.29, 143.72 4.97, 146 14.5 M146 14.5 C144.94 23.91, 146.9 32.3, 146 43.5 M146 14.5 C146.58 21.19, 144.93 30.18, 146 43.5 M146 43.5 C146.74 53.51, 140.28 58.84, 131.5 58 M146 43.5 C144.86 51.32, 143.37 57.62, 131.5 58 M131.5 58 C103.28 59.35, 74.79 60.24, 14.5 58 M131.5 58 C101.31 59.9, 69.81 58.26, 14.5 58 M14.5 58 C6.18 57.31, -0.12 51.2, 0 43.5 M14.5 58 C5.92 56.53, -2.2 53.71, 0 43.5 M0 43.5 C0.91 34.29, 1.42 25.51, 0 14.5 M0 43.5 C-0.99 36.32, -0.57 28.48, 0 14.5 M0 14.5 C0.35 4.07, 4.28 -0.28, 14.5 0 M0 14.5 C1.74 4.61, 2.91 -0.2, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(465.84166717529297 321.5) rotate(0 19.65833282470703 12.5)"><text x="19.65833282470703" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">...so</text></g></svg>
@@ -0,0 +1,4 @@
1+<?xml version="1.0" standalone="no"?>
2+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 645.75 548.5" width="645.75" height="548.5"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
4+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="645.75" height="548.5" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(40.5 10) rotate(0 284.5 86.5)"><path d="M32 0 C133.37 0.32, 235.01 0.93, 537 0 M32 0 C176.4 -1.31, 320.55 -1.95, 537 0 M537 0 C557.75 -1.04, 567.47 11.03, 569 32 M537 0 C560.23 0.01, 569.75 8.91, 569 32 M569 32 C569.16 75.26, 567.73 116.64, 569 141 M569 32 C569.86 63.56, 569.12 93.83, 569 141 M569 141 C569.65 164.2, 560.01 174.12, 537 173 M569 141 C569.87 163.38, 560.08 174.06, 537 173 M537 173 C371.9 173, 206.36 174.02, 32 173 M537 173 C434.58 172.16, 332.47 172.31, 32 173 M32 173 C12.12 174.44, -0.34 161.79, 0 141 M32 173 C11.9 172.33, -2.24 162.67, 0 141 M0 141 C-0.41 107.15, 0.55 72.95, 0 32 M0 141 C-0.02 99.16, -0.69 59.11, 0 32 M0 32 C0.52 8.82, 11.94 -1.54, 32 0 M0 32 C0.63 12.15, 8.66 -1, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(313.5 38) rotate(0 37.974998474121094 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">APP bin</text></g><g stroke-linecap="round" transform="translate(92.5 91) rotate(0 76 34)"><path d="M17 0 C46.22 0.09, 77.07 1.12, 135 0 C144.69 -1.41, 149.45 6.54, 152 17 C153.29 27.8, 153.65 37.28, 152 51 C151.89 61.61, 143.37 67.84, 135 68 C92.44 66.95, 45.03 64.74, 17 68 C8.46 70.97, -3.09 59.47, 0 51 C-0.54 39.97, 2.16 21.46, 0 17 C-2.59 3.54, 2.94 -3.33, 17 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M17 0 C53.62 -1.63, 86.71 -2.47, 135 0 M17 0 C48.59 -1.37, 80.25 -0.64, 135 0 M135 0 C146.22 -0.63, 152.31 3.8, 152 17 M135 0 C148.07 -0.08, 152.18 6.11, 152 17 M152 17 C153.17 28.98, 151.13 37.21, 152 51 M152 17 C151.56 28.7, 152.53 37.88, 152 51 M152 51 C150.78 63.12, 145.04 68.39, 135 68 M152 51 C149.98 64.35, 147.27 70.06, 135 68 M135 68 C94.08 70.35, 48.4 68.88, 17 68 M135 68 C88.73 67.83, 41.18 67.68, 17 68 M17 68 C5.95 68.44, 1.64 63.19, 0 51 M17 68 C7.53 66.77, 1.35 61.26, 0 51 M0 51 C-0.21 42.73, -0.45 33.99, 0 17 M0 51 C0.18 38.98, -0.21 27.58, 0 17 M0 17 C-1.39 5.57, 7.47 0.41, 17 0 M0 17 C-0.34 7.65, 5.27 -0.1, 17 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(112.73333358764648 112.5) rotate(0 55.766666412353516 12.5)"><text x="55.766666412353516" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libesb.a(v2)</text></g><g stroke-linecap="round" transform="translate(10 219.5) rotate(0 98 159.5)"><path d="M32 0 C65.67 1.66, 96.62 0.87, 164 0 M32 0 C63.14 -0.61, 94.32 0.23, 164 0 M164 0 C186.93 -0.65, 194.44 11.48, 196 32 M164 0 C186.59 -0.78, 194.74 11.05, 196 32 M196 32 C193.91 97.77, 196.44 162.56, 196 287 M196 32 C196.56 120.53, 196.3 209.34, 196 287 M196 287 C196.68 307.34, 184.91 320.78, 164 319 M196 287 C195.26 307.86, 186.57 316.93, 164 319 M164 319 C121.03 318.83, 81 320.74, 32 319 M164 319 C112.36 318.27, 60.82 318.68, 32 319 M32 319 C10.19 320.43, -0.18 306.9, 0 287 M32 319 C9.76 317.77, 1.51 306.91, 0 287 M0 287 C0.29 227.18, 0.9 169.8, 0 32 M0 287 C0.82 194.52, 0.05 102.73, 0 32 M0 32 C0.8 9.89, 11.96 -1.9, 32 0 M0 32 C-0.92 11.38, 12.41 1.97, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(68.5 243) rotate(0 43.025001525878906 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">CANN(v1)</text></g><g stroke-linecap="round" transform="translate(32.5 297) rotate(0 73 29)"><path d="M14.5 0 C45.87 0.59, 78.01 1.18, 131.5 0 M14.5 0 C51.15 -0.91, 85.38 -2.01, 131.5 0 M131.5 0 C142.34 0.43, 147.66 5.99, 146 14.5 M131.5 0 C142.56 -2.07, 145.69 4.18, 146 14.5 M146 14.5 C145.21 23.15, 144.34 34.51, 146 43.5 M146 14.5 C146.58 23.99, 145.68 32.29, 146 43.5 M146 43.5 C147.47 55.06, 142.36 56.87, 131.5 58 M146 43.5 C145.22 52.65, 139.64 57.91, 131.5 58 M131.5 58 C98 57.52, 59.58 57.08, 14.5 58 M131.5 58 C98.14 57.47, 65.53 58.06, 14.5 58 M14.5 58 C4.45 57.61, -1.74 53.95, 0 43.5 M14.5 58 C3.53 57.04, -0.01 52.05, 0 43.5 M0 43.5 C1.21 34.93, 0.5 30.87, 0 14.5 M0 43.5 C0.6 34.51, 0.43 25.69, 0 14.5 M0 14.5 C-1.52 5.23, 5.72 1.33, 14.5 0 M0 14.5 C-0.05 3.86, 5.79 0.71, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(55.025001525878906 313.5) rotate(0 50.474998474121094 12.5)"><text x="50.474998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libgraph.so</text></g><g stroke-linecap="round" transform="translate(34.5 370) rotate(0 73 29)"><path d="M14.5 0 C58.87 -2.02, 100.08 -1.96, 131.5 0 M14.5 0 C42.84 -0.73, 70.18 -1.11, 131.5 0 M131.5 0 C143.16 0.11, 144.11 3.01, 146 14.5 M131.5 0 C142.08 2.22, 145.29 7.13, 146 14.5 M146 14.5 C146.31 27.15, 147.03 33.98, 146 43.5 M146 14.5 C145.92 24.3, 146.41 34, 146 43.5 M146 43.5 C145.51 55, 141.76 58.3, 131.5 58 M146 43.5 C145.49 53.08, 142.92 58.66, 131.5 58 M131.5 58 C94.73 57.03, 56.76 57.73, 14.5 58 M131.5 58 C102.11 57.71, 73.84 57.42, 14.5 58 M14.5 58 C5.59 57.98, -1.69 54.82, 0 43.5 M14.5 58 C3.57 56.22, 0.3 52.77, 0 43.5 M0 43.5 C-1.32 32.77, -0.02 22.41, 0 14.5 M0 43.5 C0.17 37.93, -0.41 31.17, 0 14.5 M0 14.5 C0.03 6.32, 5.43 0.91, 14.5 0 M0 14.5 C-2.15 4.82, 6.92 -0.45, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(72.16666793823242 386.5) rotate(0 35.33333206176758 12.5)"><text x="35.33333206176758" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libge.so</text></g><g stroke-linecap="round" transform="translate(33.5 444) rotate(0 73 29)"><path d="M14.5 0 C55.96 -0.33, 94.34 -0.64, 131.5 0 M14.5 0 C58.65 -0.3, 102.74 -0.84, 131.5 0 M131.5 0 C142.21 0.89, 144.27 5.18, 146 14.5 M131.5 0 C140.46 -0.29, 143.72 4.97, 146 14.5 M146 14.5 C144.94 23.91, 146.9 32.3, 146 43.5 M146 14.5 C146.58 21.19, 144.93 30.18, 146 43.5 M146 43.5 C146.74 53.51, 140.28 58.84, 131.5 58 M146 43.5 C144.86 51.32, 143.37 57.62, 131.5 58 M131.5 58 C103.28 59.35, 74.79 60.24, 14.5 58 M131.5 58 C101.31 59.9, 69.81 58.26, 14.5 58 M14.5 58 C6.18 57.31, -0.12 51.2, 0 43.5 M14.5 58 C5.92 56.53, -2.2 53.71, 0 43.5 M0 43.5 C0.91 34.29, 1.42 25.51, 0 14.5 M0 43.5 C-0.99 36.32, -0.57 28.48, 0 14.5 M0 14.5 C0.35 4.07, 4.28 -0.28, 14.5 0 M0 14.5 C1.74 4.61, 2.91 -0.2, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(86.84166717529297 460.5) rotate(0 19.65833282470703 12.5)"><text x="19.65833282470703" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">...so</text></g><g stroke-linecap="round" transform="translate(229.75 216.75) rotate(0 98 159.5)"><path d="M32 0 C62.66 3.83, 88.84 0.17, 164 0 C183.6 2.67, 198.15 14.08, 196 32 C195.58 97.42, 197.18 157.18, 196 287 C194.31 311.54, 187.3 316.74, 164 319 C116.95 321.36, 74.73 322.53, 32 319 C12.76 318.8, -2.02 305.76, 0 287 C-5.94 197.33, -5.82 113.61, 0 32 C-1.91 11.46, 13.21 -0.7, 32 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M32 0 C60.97 -0.41, 85.8 -0.86, 164 0 M32 0 C85.29 -0.71, 138.37 -0.42, 164 0 M164 0 C184.81 -0.09, 195.48 8.76, 196 32 M164 0 C187.56 0.34, 194.31 11.4, 196 32 M196 32 C195.51 90.89, 196.76 151.03, 196 287 M196 32 C196.12 89.27, 197.54 144.92, 196 287 M196 287 C197.65 308.27, 185.68 320.3, 164 319 M196 287 C197.21 308.94, 187.35 317.8, 164 319 M164 319 C126.39 319.15, 88.9 317.98, 32 319 M164 319 C122.92 319.1, 80.63 318.97, 32 319 M32 319 C9.78 319.49, 0.8 307.59, 0 287 M32 319 C9.2 320.02, -1.12 309.59, 0 287 M0 287 C1.02 229.14, 0.64 172.5, 0 32 M0 287 C0.27 186.15, 0.15 84.61, 0 32 M0 32 C-1.79 11.84, 9.16 -0.48, 32 0 M0 32 C2.15 12.91, 8.88 -0.29, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(288.25 240.25) rotate(0 45.75833511352539 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">CANN(v2)</text></g><g stroke-linecap="round" transform="translate(252.25 294.25) rotate(0 73 29)"><path d="M14.5 0 C52.99 3.89, 97.1 4.63, 131.5 0 C139.26 1.96, 147.45 1.82, 146 14.5 C144.16 28.83, 147.81 34.48, 146 43.5 C147.54 55.86, 143.89 56.2, 131.5 58 C96.64 58.82, 55.58 56.45, 14.5 58 C6.34 61.36, 2.27 50.1, 0 43.5 C-1.48 38.07, 2.97 30.35, 0 14.5 C0.29 2.78, 6.25 0.41, 14.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.5 0 C44.5 2.19, 70.97 2.04, 131.5 0 M14.5 0 C44.56 0.09, 74.88 -0.82, 131.5 0 M131.5 0 C143.11 0.29, 144.53 5.47, 146 14.5 M131.5 0 C139.61 0.13, 148 3.97, 146 14.5 M146 14.5 C144.56 23.44, 145.57 29.14, 146 43.5 M146 14.5 C147.09 25.2, 146.44 36.61, 146 43.5 M146 43.5 C147.06 53.7, 142.92 56.96, 131.5 58 M146 43.5 C145.57 51.24, 142.67 57.43, 131.5 58 M131.5 58 C100.91 55.71, 71.05 58.01, 14.5 58 M131.5 58 C105.26 57.16, 80.31 56.54, 14.5 58 M14.5 58 C3.56 58.88, -0.97 54.26, 0 43.5 M14.5 58 C3.05 57.53, 0.77 54.03, 0 43.5 M0 43.5 C1.9 36.17, 0.2 29.16, 0 14.5 M0 43.5 C-0.7 33.83, -0.56 22.76, 0 14.5 M0 14.5 C1.87 6.78, 3.28 -0.25, 14.5 0 M0 14.5 C-1.89 6.86, 2.65 1.21, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(274.7750015258789 310.75) rotate(0 50.474998474121094 12.5)"><text x="50.474998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libgraph.so</text></g><g stroke-linecap="round" transform="translate(254.25 367.25) rotate(0 73 29)"><path d="M14.5 0 C56.39 -0.04, 103.54 -5, 131.5 0 C144.17 -1.03, 145 3.14, 146 14.5 C147.83 28.48, 149 35.27, 146 43.5 C146.57 54.4, 142.9 60.09, 131.5 58 C98.56 59.85, 64.87 53.43, 14.5 58 C1.76 55.08, 1.21 51.26, 0 43.5 C-0.08 32.11, 1.05 25.23, 0 14.5 C0.81 4.45, 1.54 -3, 14.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.5 0 C55.87 1.09, 98.64 -1.14, 131.5 0 M14.5 0 C50.03 1.26, 82.89 1.43, 131.5 0 M131.5 0 C139.81 0.11, 147.74 4.08, 146 14.5 M131.5 0 C140.74 0.92, 146.94 3.05, 146 14.5 M146 14.5 C147.32 26.16, 144.74 35.81, 146 43.5 M146 14.5 C146.58 23.37, 146.93 31.19, 146 43.5 M146 43.5 C145.62 51.49, 142.48 57.5, 131.5 58 M146 43.5 C145.18 52.15, 139 58.36, 131.5 58 M131.5 58 C101.76 58.48, 73.35 57.76, 14.5 58 M131.5 58 C92.92 58.01, 55.12 58.11, 14.5 58 M14.5 58 C3.28 57.6, 0.67 53.92, 0 43.5 M14.5 58 C3.22 58.32, -1.48 55.4, 0 43.5 M0 43.5 C1.04 34.44, 0.41 26.22, 0 14.5 M0 43.5 C1.16 34.08, -0.56 22.58, 0 14.5 M0 14.5 C-1.64 6.59, 2.94 1.06, 14.5 0 M0 14.5 C1.01 4.4, 3.5 -1.11, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(291.9166679382324 383.75) rotate(0 35.33333206176758 12.5)"><text x="35.33333206176758" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libge.so</text></g><g stroke-linecap="round" transform="translate(253.25 441.25) rotate(0 73 29)"><path d="M14.5 0 C58.97 0.73, 96.43 0.07, 131.5 0 C144.38 1.96, 143.74 6.38, 146 14.5 C146.96 26.61, 148.13 38.34, 146 43.5 C145.8 51.15, 138.6 59.51, 131.5 58 C82.41 53.29, 40.69 54.3, 14.5 58 C5.62 60.55, -0.7 53.46, 0 43.5 C0.61 36.07, -3.5 26.41, 0 14.5 C-1.53 1.42, 6.76 2.52, 14.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.5 0 C59.53 -0.22, 102.84 2.24, 131.5 0 M14.5 0 C50.63 -0.32, 88.98 -0.75, 131.5 0 M131.5 0 C140.79 0.8, 146.81 3.28, 146 14.5 M131.5 0 C142.06 -0.62, 144.07 6.44, 146 14.5 M146 14.5 C145.76 26.2, 147.13 38.26, 146 43.5 M146 14.5 C146.07 23.13, 146.91 33.19, 146 43.5 M146 43.5 C145.28 52.29, 139.28 58.31, 131.5 58 M146 43.5 C144.63 54.73, 142.45 56.17, 131.5 58 M131.5 58 C97.89 58.28, 62.55 56.21, 14.5 58 M131.5 58 C90.46 58.44, 51.3 59.02, 14.5 58 M14.5 58 C3.43 58.28, -1.29 55.11, 0 43.5 M14.5 58 C4.07 58.27, -1.15 54.4, 0 43.5 M0 43.5 C1.11 35.19, -0.54 31.78, 0 14.5 M0 43.5 C-0.6 32.85, -0.72 20.97, 0 14.5 M0 14.5 C0.88 4.45, 3.68 -0.96, 14.5 0 M0 14.5 C1.71 6.2, 7.01 -1.22, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(306.59166717529297 457.75) rotate(0 19.65833282470703 12.5)"><text x="19.65833282470703" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">...so</text></g><g stroke-linecap="round" transform="translate(439.75 216.75) rotate(0 98 159.5)"><path d="M32 0 C60.8 -1.24, 91.67 -1.29, 164 0 M32 0 C71.77 -2.1, 112.85 -0.39, 164 0 M164 0 C186.74 -1.73, 197.96 10.42, 196 32 M164 0 C183.25 -1.78, 194.9 9.63, 196 32 M196 32 C197.28 89.7, 196.65 145.31, 196 287 M196 32 C196.72 121.76, 197.36 213.52, 196 287 M196 287 C194.11 306.92, 186.81 317.48, 164 319 M196 287 C195.49 309.46, 183.67 320.77, 164 319 M164 319 C114.47 317.15, 66.5 320.24, 32 319 M164 319 C133.97 317.93, 101.23 318.21, 32 319 M32 319 C11.46 318.25, 1.67 307.28, 0 287 M32 319 C10.82 320.7, 0.97 306.97, 0 287 M0 287 C2.02 229.52, 0.85 170.65, 0 32 M0 287 C1.15 221.33, 0.87 156.86, 0 32 M0 32 C-1.85 12.47, 11.43 -0.58, 32 0 M0 32 C-1.45 11.62, 8.78 -1.89, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(498.25 240.25) rotate(0 44.84166717529297 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">CANN(v3)</text></g><g stroke-linecap="round" transform="translate(462.25 294.25) rotate(0 73 29)"><path d="M14.5 0 C44.74 0.11, 76.67 -0.83, 131.5 0 M14.5 0 C40.65 -1.91, 66.38 -1.17, 131.5 0 M131.5 0 C139.36 -1.55, 145.04 3.93, 146 14.5 M131.5 0 C139.44 1.51, 144 4.72, 146 14.5 M146 14.5 C146.96 24.72, 145.86 32.81, 146 43.5 M146 14.5 C145.22 20.24, 146.91 26.63, 146 43.5 M146 43.5 C145.56 54.15, 139.72 59.54, 131.5 58 M146 43.5 C147.47 53.08, 140.96 56.28, 131.5 58 M131.5 58 C105.22 59.98, 80.49 60.68, 14.5 58 M131.5 58 C101.07 57.53, 70.68 57.38, 14.5 58 M14.5 58 C4.97 59.48, 0.84 51.98, 0 43.5 M14.5 58 C3.23 56.47, 1.28 54.08, 0 43.5 M0 43.5 C-0.79 31.55, 2 21.91, 0 14.5 M0 43.5 C-0.87 37.42, 0.43 29.24, 0 14.5 M0 14.5 C-1.26 5.67, 3.19 -1.64, 14.5 0 M0 14.5 C-0.39 6.53, 6.06 -0.96, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(484.7750015258789 310.75) rotate(0 50.474998474121094 12.5)"><text x="50.474998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libgraph.so</text></g><g stroke-linecap="round" transform="translate(464.25 367.25) rotate(0 73 29)"><path d="M14.5 0 C45.53 0.73, 81.64 2.19, 131.5 0 M14.5 0 C38.56 -0.63, 63.94 -0.31, 131.5 0 M131.5 0 C139.66 1.32, 144.26 4.73, 146 14.5 M131.5 0 C141.69 -1, 144.06 6.09, 146 14.5 M146 14.5 C144.44 25.61, 147.84 32.5, 146 43.5 M146 14.5 C145.99 21.64, 145.49 28.58, 146 43.5 M146 43.5 C147.28 53.09, 140.99 56.5, 131.5 58 M146 43.5 C144.01 51.53, 142.73 56.5, 131.5 58 M131.5 58 C88.75 57.43, 47.3 59.9, 14.5 58 M131.5 58 C100.87 58.13, 70.52 56.79, 14.5 58 M14.5 58 C3.44 56.67, 1.11 53.96, 0 43.5 M14.5 58 C6.63 57.25, 1.63 52.15, 0 43.5 M0 43.5 C-1.46 35.87, 0.29 27.09, 0 14.5 M0 43.5 C-0.74 32.6, -0.93 20.04, 0 14.5 M0 14.5 C-0.34 6.31, 5.9 -0.84, 14.5 0 M0 14.5 C-2.14 5.04, 5.05 -0.66, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(501.9166679382324 383.75) rotate(0 35.33333206176758 12.5)"><text x="35.33333206176758" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libge.so</text></g><g stroke-linecap="round" transform="translate(463.25 441.25) rotate(0 73 29)"><path d="M14.5 0 C47.52 1.14, 83.76 -2.63, 131.5 0 M14.5 0 C39.78 1.19, 65.7 0.48, 131.5 0 M131.5 0 C141.62 -0.87, 144.32 5.92, 146 14.5 M131.5 0 C142.16 -0.02, 145.53 3.05, 146 14.5 M146 14.5 C144.85 26.37, 144.75 34.84, 146 43.5 M146 14.5 C146.43 24.58, 145.7 33.99, 146 43.5 M146 43.5 C144.27 51.75, 142.52 56.69, 131.5 58 M146 43.5 C147.36 51.94, 143.33 57.16, 131.5 58 M131.5 58 C105.43 60.14, 79.81 58.6, 14.5 58 M131.5 58 C87.04 56.64, 44.54 57.71, 14.5 58 M14.5 58 C6.4 57.34, 1.41 52.28, 0 43.5 M14.5 58 C3.71 60.19, 0.4 51.8, 0 43.5 M0 43.5 C1.72 36.08, -0.67 25.87, 0 14.5 M0 43.5 C0.07 34.33, 0.77 23.27, 0 14.5 M0 14.5 C-1.86 5.01, 5.02 -0.57, 14.5 0 M0 14.5 C1.2 2.78, 4.45 -1.61, 14.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(516.591667175293 457.75) rotate(0 19.65833282470703 12.5)"><text x="19.65833282470703" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">...so</text></g></svg>
@@ -0,0 +1,11 @@
1+<?xml version="1.0" standalone="no"?>
2+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1410.5 128.5" width="1410.5" height="128.5"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
4+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAS8ABEAAAAADUwAAARkAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhxGBmAANAgKCY4uERAKgySCcwsMAAE2AiQDDgQgBYJeByAMFBviC8gGHng8q/eTtB46HXrlTodqRu6anT1nDkbPOZqx+v30y78JywgHbFxe5l9IRtgYkxd+AYC6OiJhUJhWyVoC26pKQFVhTL+VXebGoK2I3+P1RxCAGwCQEICCQABOUklFeH1NXdhRAEwToCd2OsUakf3LKK8PQWAoAPbnWc3/EUjIKMjyi+JkLCAhAWJzbDWoFvYVkrAiC8cPcyRf1OSv7WWlaTcd8mZzM8ibOXlEERd98AZIFul/QMUCSIAMxCIjwKKgQpHF3HSYJoe9+E/fKrAQi/srDShuNHC3+W8W4kTNEOZRBt60u3AjDw+VGIhiVa0JeENipMRAKjYQhZ4SA7lY9YXkHF+HP0tTdVWvn9BVnzozOhFScghvfNKkrpWpITr9ATVEl98TWqml2DsmNW1xiYGyhlap6Rq01bWztWs5fcv/SgwsxY1qSM5t87f7Q0FvSmilV0vxeNSa0INt/tCD3hSPppUYWE/J4/GBQOJ5YatbC2nJvoLo5JyONF0v1bI8sEHXU/QszTzREDD9yqbB5NVyTo0hgm3NC8EsTwquZXnkdVqKR/OWGDiKGzv9NV5k9mjC+brRsevtjAturSv0YRI5nB6hIBJRmkhjtLySIVDwb/HcbAwhlolDvDYu9AkSOZGepCAZKZpktaYiNo2QzmRA1WaE3iORM+lZCrKRo8lWay5i8wj5TAEKtQWhL5LIxfQSBaUo05SqtRz5V7woIGNHIhFhmsgAWABwAgpwFGAAlEFJuO+S5cnI3OPMvf/511/33eHUX32163Snnntm8nlFb7zRu2Dutde6z4HE09fl6j1nCpFylsuVc1e995prrqveel1BnKHxCdsf3XNm/Os9r4tZlm3KX85qBMcls6Wnd98hRNEr7bPLxOzrTqlwGctczjU9gq/CP7H09IUjPdb++Wc2507mdmwpD+/krNr2OiPSuvCiqOqo5mW3drWK0Pxd9ivqdvX/mGQ59Rw+WxO8+/HzL4iynvZWlHVRy9Dy1bENiSsKj4o8sfjrhanKovOjra/3rryyst3xJ/PLl3x019S6gkDu6JRd2jbwYH1jV7ql4Nxo66mB9qlVZ3V0LDht++x5+nXfsbfam21NPWJBe5T31aW1FcPV5zW07Wl+3DVRjvrremeSu7J3jKY5Wgtn24ZnnnnI1wY5teDEu9dcNxyx9De7S/4S4M3Lvs8G+KQo51TzU7NA+VfeAtiRZqQ/UDXltx7T/98eR+BwnGS7v2Qpq6WTaVM2i/QNeWVGypU6CTxkow8ZoTiAQt7OXYJYHndJhGO4ZErR9yr9Lgu7iRZW4+vAT4BRNrGeUQJ0soYeJtnKNgJsYiMqVZRSQQVL8DLJOJNsYAzOUqmmGJVKyv2EUfSNX9zOGraCGE2xaahSsUK53B9WMr8m1Ph01ZQwRoDtpyiq4miLheiA4TQ7Rh66dR4Xtk1sZo9vgGlm2L73mpOeqdKEn1p6kXHimZspZ2aQX6SQjlg4GxQB); }
5+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAP8ABEAAAAADDAAAAOkAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgTyBOgsGAAE2AiQDCAQgBYJeByAMFBv7CsiOwnGvlDZZYnEweYgIorHfz+4hZs0seaO5hkqDFCiRqCnS9Yfy8/sp7+3NByunmBTOr5WfUpnKaRfidCHesrfZG3wjj8Rpt/n/79WPuf9lYsDGFsvL+TdLNCJrTUq6gSZIS1hdg7p5TCxxxSvYP6pXYTDz90YCTYBACqakwdBvgjalmhawqIKKBiPXl3IvdoCRlIj7VPEB6WGZyzBBCQ/Aps6a7fPydig+ysHPqp+lzQLlHnb0GdDxt09BVuumMMaIREEXvUBygzGoEkTvaEXTWPb5ztiMal34R34AzGwxcNmXLyG0jTCkrWcgDl8GF+WuR2CAZjB2KqKK+gQGuhkGaIoXGOhnsKTqo6QmOYJgimnlEMUSHusfUg1RqbvzQcOUJGEVms8VrELLOa8WE87dMExIrsDAsAcxLKMES3h8NRl3k/f8LzAwzlRjVR/dIDfK6iqRU4tFwvE8dqpXGmT1isjxhAgMTLd0p/XlSsB9wZw2TZGYZYdwM3OTGqG0lorg4QpKORpB7H0ZAioqzjJYvKiPcjK0qqG7syqC51AqghdnEY4nosDAOlPdLDtFIONJ2Pa7jsEislB2cCF267syaDe8OwcP8GQ9JF6CYgrMrfpf8N20N8KH8gU/4mt9fwYdgA/kEAQcG8TXYECHIEKpMMAkzPo8gw7HR3CIhCg2kq/RgI5BxFJxEE/irJ/AoBPxAgcHJLEOviYD05Q2gOLcLfVBFU0BCarylRvAHmj7Rp+6bFw6I5KeC+05fnum/2TUXlgVcMa2rw1W3c/Ya5/Mcs4IeLHRW0+ehB9DYbYTj7xKOkzv+ZOe5jx92t6SmcwdNqquPxqNWPi50nhloGvS07iuK+TeVdQbvq70nX/YyZwtAWscseY5jW5i6dymFNelqVx3R29ZUNnrk4aqw/67715c3OxVpOilw2az5nvKUNzfxjlab2v+H4td/x4+T3+NBOArIWqX9q3FVf0rswHUSRCYISWo+j8infq8R/B8aKr888CmmZ+MYxLxJenzrqt1SS+qrMCUF6U2dLmlTS0+tMUcurlqXFvtkVe4xvo+cE7Rb6Zp+imalWkzbI65FDPNgKVxSJEij2jYoGHTDcAxli6RVVMlhy4YleaP5ykzB4b7c5hZxVJ2iCeH1VSZrTBOD5ZOMEAx7xZRzHeXy8NNsDpq/swd56xzc+VMsyw2VowaM2/zxZseitWQlWun5zmrzJKs9QGx0xJCwQdsGZgG); }
6+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAXMABEAAAAADqgAAAVyAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAAPAgKCY4uERAKhiiFIgsIAAE2AiQDCgQgBYJeByAMFBvtDFGUT85YZD8LnLJ5ROsOPyRy6YoJha0rOnXC75Fsrjnp9HI+RF/zH/Oo95O2Aygd2ZklcAVPROa2km97Ugf0suTOSQ3ElZw8K/s3eNjh9Ydtg7aqxnQ8RRzcIggowig7EOZ/renJvIRdIiMBW2O6mftzNb7G7F4xwApRltABCRUl6wh1hWPHQtield3atr1iotcJiRAQAEegzEBSlXl7BLpbqbwyBAEE0H4HtAHb6DmB8zv0AhRg2AZoIj1d4SlbgJEBTg4wyhbvVB9/HPC4WuYnu9AqBPCJeDFQox2vPwHT2X8Agg6AAeAAPHEQOjREwygQ2Gz1HBNk4aFlpV4gOCUdnvxTPkD8KijN3VtE66Uia5kC3u6FAj6gv6kCjBeiYpTPJg1MUEDxCjDWTFDA8aLyCI+obCW0pVgt6JqhtPATIwelbmoRRDQ+athqmSSO4EuWxhH80TxSLJXtNcNI0ilBgaxh0BatlqJSjJ5tGC1Y5N+A62h8nTjCI5u7I4nNhT4BdKacrzBNUXHkTATh932UTSnNFDuliMvzshTOC55hsSwurBBpE4KVJL26lNY2cQm9WpkOI82BisBNxVkFXtvkERUyt7C5ubEwTDOA8ojL62SAKctNFcT4ujbC16dkM2VUet3wgklgZCgGWXlVImt0XYYBU29YLF0xg3AL/xaem7UJDuPCM7jK+xI5oIcyIsT6SKsJsCkhY3IUhlz5UiJX9FpGg1bfaLUDticMzIjJMCo/S+SFvsrYsOs3rR4w8qwB4OIBMPgiywIHgBBG3xEgD1HsACDKGtBeMB7SxHGucePYc8WDkyC9cTUM6Y3m9oNNxit4O5+lvMBEaQ2UK5RPPuFa7fvEnAef7EHefMvDJ/9lUh6AdZdM8ZE9OLcPaETWRDHsVIVZiJbDAJlRBOYqgq3GHozq9EJ+D1HB6Sy5j9iHD6o8rbfN7dAX4NoY8jEd8C4E89cqR3H1TlIDfQb1j+H81oksUV3F9kbfRegJNgQXwc4yo69nITqpLcCM7NA9HwvZJN3FCzIQcpimzHsNlPHKTRgOTSKDaW/smMAtMNqwQmYw9hRRD2TYmn6wSf8TzBhimrhIIPuRX7++yLRR+GXHF9aP9/oYrpWUum45vtTADRhJbstq4T8F4R69Tb5bIpx9wpNoEfqEGt3BTdzopD+ij5beAufpyT90ug+9qfrxZaz2yvKRj+EhGb6U3zi0Vmf/fyMCvtoCDRtUt1FnHWuHfbqNFMo54PAhVmfVNSalzLVv8e45cpvsa5pOcr1Y2vzuq/KKKZRjM2wBK6ktXkyfcPZ0mBMJgiVt3FafRaE9HbEIT5EC2zyPJ2wBB9FvjyQ8+c+5vpV/Chw3s3+FdyLU7OQCZDj7iG5Da/a5XI/jJChfi6nMZXybYTlB0UCQ197AslWtH/btZoLhrSVuqP/KV7++saidOeNSsHjz+HLQkZHktn75eRLqOrv4Eg7Me8hv9s8YpGPbr1qIZkI87wG3hmJjNpfDJ8WH1p1lVj24gZ/kS3EOM0Y26jrdDYtL/ZfF9/RpuYqh8es+nODi8k8gM/kXAHgy80sHAN4bR2y2PliG2l9eBAC2YDMmvp1p7XeP9f/XASA4KhkO/gU1xF2cfUdUAqN0qUYGPGSDHmyQZgcg1rPcR/B0ycfgDOXjSLR6r9bv0zGTVMQw3g/oliVJgVxJskTzhklTrESWAvk0pEmUIkWecmlSpMmTjH0N6eJFIVWyLzBWOb5fylsxRpJSFBQ1pKyQSPaLqTJrEREfL12CwbKUniKmIY/mJCOtWMxQNvLQ4nlCugoUqgrNkiFT6d69Jz1TqEfwh2PDGcsqZKGmMIyPDA6kLIgDAAA=); }
7+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
8+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAARgABEAAAAADMQAAAQHAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKglCCJQsGAAE2AiQDCAQgBYJeByAMFBtmCxFVnGqyHwnZKead2HpljEVwEoLUPjC2hl3oCCL8v6o6yWBBv9sz/AVSMzhv0bgdQvt++2lJqKq+h8k7XdC1jEk7ouuQJZ5TmcuUmpxS+3f/cxqZyy/ZCgloXH9frmRsjQG8AkoAGJBQKMym5GSmyZGqGspJM2Fm/DLoblKw/v4kCOAJAAigEAQB3IkkEilV60xCTgyAywMM3K31RZkYsoFCAdItUd4ZyiUQlNjR4gJ+To5Uovo8VGwW0Ffobr4b6G6hiVsxWfD3C8qm/gOxW8aIggYC0QiJ0RALRpR+ncDlWW7VELEgF+j9yJ1gVVQ8q9G3yHhWcb1pqFT6B090042cIhZA1VZEmuUUZSmSjjlFW1ATnVQbkWFwsa78noutwdH2npikJNL6pH1XvwBCTbIg1CKUYpx0Tuwzl3KK2YKZfa4+1GC1mK0ihP5HvJfNaoPo5AENSQZWklKswklEqMrBAcnBShKZc4r9kpGk8WoT1wVH2Z5Ocs4NaMwipM5udKVkEB5wLukS2LpWBaotVlVm79ZJVZWBg/buQINJ9DiDBjmJXMkpblZ7TNVKEmnEpjD4c4MDtZAjQBnxPRPQHC9kSFCS1GuxGIengf+L9+YNwnIOPHO+DwI64pOMDIWU1VoCvkLUXAMta3zfCegeP8gYYZJGtc6AXxArt8HONt8fAvrEXzJueKRbrS9w/94R0DhRhCIujwZAAWAAO9CRECMBTWDLdn/j759h7z86+X3w9OimS1LejdkW93PuOLVO0y6NWrovv548XSJmeAQtO5Y0jcjDtphOg2h52SmY/uF63dPXK1ytNX2mQviMkBt1a6ROdR89/sSNjA0eY45dKz/cq3XtWn60tYw9EXWs3Acb+U/aFBD7KcP818+XepRc48cS++saA2OqOq7P8NCXu+ervLqY15m9YZNv+y889Xbd/JApO/XAd8UDLo/xsw29FXphy9116WNnldrZufyAwY06xD3aOc8vek6bhDYVysTdxOlyk3/B5NpFHT1DPD3ae/uv8PZe0qNn1ZwVsw1aE7Lk9ZdXpsvWhgFH/1BvqyPT6DaxaVOfQt+cHvolwM0l7xMBnmQkTXY99Zv5q7sTwolaEP/zlMy3AUPw9iqCG0Mz9EvasZlSb0jBTPI5ZNy9y0EDoohxA9K5XdiEQI7bFN7stGkyGX3aDNts9CNOdvN9UA/LNuecsI1lTJkZ+1xxjeWcM4CcZJKd7BSkFPvsss8pO3AC5MJitRxkC8IwW2b65IYyV5C2MzivAdk3yGcLajnI06DY5Ga5yEILLDeXyAK/XIlTDVg75HbihVfLItx0zgWPrpZDjrg5veqit8ZSCaLOnChuKFc3irR3smZIqMECroAMAA==); }
9+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
10+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
11+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="1410.5" height="128.5" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(436 21.5) rotate(0 109.5 43)"><path d="M21.5 0 C67.47 -2.07, 116.1 -1.58, 197.5 0 M21.5 0 C61.73 -1.27, 100.96 -1.12, 197.5 0 M197.5 0 C211.28 0.44, 219.85 8.61, 219 21.5 M197.5 0 C212.36 -1.03, 218.42 4.9, 219 21.5 M219 21.5 C219.25 35.32, 219.87 49.1, 219 64.5 M219 21.5 C218.51 29.78, 218.52 37.99, 219 64.5 M219 64.5 C220.63 79.52, 210.92 84.41, 197.5 86 M219 64.5 C217.18 79.9, 211.37 87.85, 197.5 86 M197.5 86 C140.54 87.2, 82.24 87, 21.5 86 M197.5 86 C132.03 86.42, 65.07 86.67, 21.5 86 M21.5 86 C6.23 85.05, 0.11 78.68, 0 64.5 M21.5 86 C9.12 85.73, -1.46 78.49, 0 64.5 M0 64.5 C-0.33 54.56, 0.02 45, 0 21.5 M0 64.5 C0.06 47.74, -0.56 31.91, 0 21.5 M0 21.5 C-1.75 7.69, 6.84 -0.77, 21.5 0 M0 21.5 C-0.74 5.42, 8.68 -0.55, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(460.6333312988281 52) rotate(0 84.86666870117188 12.5)"><text x="84.86666870117188" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">GE图(用户直构)</text></g><g stroke-linecap="round" transform="translate(857.5 20.5) rotate(0 109.5 43)"><path d="M21.5 0 C55.89 -0.17, 90.78 0.31, 197.5 0 M21.5 0 C65.14 -1.35, 110.67 -1.15, 197.5 0 M197.5 0 C210.19 -0.34, 217.26 6.63, 219 21.5 M197.5 0 C211.44 0.58, 218.13 7.77, 219 21.5 M219 21.5 C218.32 33.72, 220.6 47.3, 219 64.5 M219 21.5 C219.16 31.09, 219.27 42.23, 219 64.5 M219 64.5 C220.74 79.11, 212.6 84.52, 197.5 86 M219 64.5 C219.51 80.58, 212.37 85.47, 197.5 86 M197.5 86 C151.04 88.76, 106.02 85.67, 21.5 86 M197.5 86 C134.9 86.6, 73.83 85.6, 21.5 86 M21.5 86 C6.57 84.75, 1.24 80.09, 0 64.5 M21.5 86 C7.91 85.39, 0.55 77.62, 0 64.5 M0 64.5 C0.56 48.8, 0.55 35.9, 0 21.5 M0 64.5 C-0.14 55.44, -0.7 46.85, 0 21.5 M0 21.5 C-1.12 6.08, 5.9 1.73, 21.5 0 M0 21.5 C-1.3 6.65, 6.6 -2.26, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(877 38.5) rotate(0 90 25)"><text x="90" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">GE图</text><text x="90" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(匹配到当前版本)</text></g><g mask="url(#mask-uqYTsCh0_i9ZnJwIlLKVv)" stroke-linecap="round"><g transform="translate(218.00298586794452 64.82936628409306) rotate(0 108.57118195146768 0.33531685795347244)"><path d="M0.07 -0.75 C36.04 -0.82, 179.86 -0.26, 216.06 0.01 M-1.36 1.47 C34.95 1.51, 181.89 1.07, 218.2 1.2" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(218.00298586794452 64.82936628409306) rotate(0 108.57118195146768 0.33531685795347244)"><path d="M194.71 9.75 C200.91 5.2, 208.53 4.41, 218.2 1.2 M194.71 9.75 C201.72 7, 208.55 4.6, 218.2 1.2" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(218.00298586794452 64.82936628409306) rotate(0 108.57118195146768 0.33531685795347244)"><path d="M194.7 -7.35 C200.96 -6.45, 208.59 -1.8, 218.2 1.2 M194.7 -7.35 C201.7 -4.74, 208.53 -1.78, 218.2 1.2" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-uqYTsCh0_i9ZnJwIlLKVv"><rect x="0" y="0" fill="#fff" width="535.1453497708799" height="165.5"></rect><rect x="306.5741678194122" y="52.664683142046556" fill="#000" width="40" height="25" opacity="1"></rect></mask><g transform="translate(306.5741678194122 52.664683142046556) rotate(0 19.85000697564334 12.52178897660724)"><text x="20" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">构图</text></g><g mask="url(#mask-4nnUq83srqtgPvoYGQz7x)" stroke-linecap="round"><g transform="translate(656 64.5) rotate(0 98 0)"><path d="M1.05 -0.3 C33.76 -0.4, 163.75 0.43, 196.17 0.37 M0.15 -1.51 C32.72 -2.06, 162.91 -1.86, 195.31 -1.57" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(656 64.5) rotate(0 98 0)"><path d="M171.78 6.88 C178.14 4.47, 186.18 0.98, 195.31 -1.57 M171.78 6.88 C178.56 5.64, 183.54 2.06, 195.31 -1.57" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(656 64.5) rotate(0 98 0)"><path d="M171.86 -10.22 C178.33 -7.59, 186.35 -6.05, 195.31 -1.57 M171.86 -10.22 C178.47 -7.31, 183.43 -6.75, 195.31 -1.57" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-4nnUq83srqtgPvoYGQz7x"><rect x="0" y="0" fill="#fff" width="952" height="164.5"></rect><rect x="704" y="39.5" fill="#000" width="100" height="50" opacity="1"></rect></mask><g transform="translate(704 39.5) rotate(0 50.15891027482223 24.25569677524311)"><text x="50" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">IR语义</text><text x="50" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">兼容性处理</text></g><g stroke-linecap="round"><g transform="translate(1081 63.5) rotate(0 59 0.5)"><path d="M-0.52 0.83 C18.93 1.22, 97.24 1.92, 117.02 2.06 M1.41 0.22 C21.19 0.32, 99.87 0.59, 119.22 0.49" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1081 63.5) rotate(0 59 0.5)"><path d="M95.73 9.05 C104.91 4.69, 113.08 3.79, 119.22 0.49 M95.73 9.05 C104.32 5.61, 111.47 3.62, 119.22 0.49" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1081 63.5) rotate(0 59 0.5)"><path d="M95.73 -8.06 C104.87 -6.75, 113.03 -1.98, 119.22 0.49 M95.73 -8.06 C104.34 -5.44, 111.49 -1.39, 119.22 0.49" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(10 11.5) rotate(0 99.5 53.5)"><path d="M110.69 0.32 C123.52 0.15, 137.22 3.25, 148.8 6.97 C160.38 10.68, 172.16 16.57, 180.2 22.59 C188.23 28.61, 194.38 36.06, 197.01 43.09 C199.64 50.12, 198.72 57.66, 195.99 64.78 C193.26 71.9, 188.32 79.82, 180.64 85.81 C172.95 91.8, 161.78 97.38, 149.88 100.74 C137.98 104.09, 122.79 105.4, 109.22 105.92 C95.65 106.43, 81.3 105.79, 68.46 103.82 C55.62 101.85, 42.07 98.85, 32.19 94.09 C22.32 89.33, 14.73 82.06, 9.22 75.27 C3.72 68.49, -0.7 60.73, -0.85 53.38 C-1 46.03, 2.65 37.67, 8.32 31.16 C13.99 24.65, 23.02 19.07, 33.17 14.32 C43.33 9.57, 56.06 4.94, 69.23 2.66 C82.41 0.38, 104.46 0.68, 112.22 0.65 C119.98 0.62, 115.81 1.66, 115.78 2.51 M146.8 7.62 C158.58 10.59, 168.32 16.31, 176.53 21.92 C184.73 27.54, 192.4 34.56, 196.02 41.32 C199.63 48.08, 200.46 55.43, 198.2 62.49 C195.95 69.56, 190.26 77.64, 182.48 83.74 C174.7 89.83, 163.25 95.38, 151.51 99.07 C139.76 102.77, 125.48 104.93, 112.01 105.89 C98.53 106.86, 83.63 106.66, 70.65 104.87 C57.67 103.09, 44.12 99.84, 34.15 95.19 C24.17 90.54, 16.71 83.68, 10.79 76.98 C4.87 70.28, -0.99 62.06, -1.38 54.99 C-1.78 47.91, 2.91 41.05, 8.43 34.52 C13.95 28, 22.35 21.27, 31.74 15.83 C41.12 10.39, 52.15 4.72, 64.76 1.88 C77.37 -0.95, 93.85 -1.87, 107.39 -1.15 C120.92 -0.44, 139.83 4.79, 145.97 6.18 C152.1 7.57, 145.08 6.24, 144.2 7.2" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(68.91787679781737 52.669787206519686) rotate(0 40.724998474121094 12.5)"><text x="40.724998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">用户APP</text></g><g stroke-linecap="round" transform="translate(1201.5 10) rotate(0 99.5 53.5)"><path d="M120.87 0.35 C133.65 1.15, 147.16 5.88, 158.07 10.4 C168.98 14.92, 179.48 21.12, 186.33 27.48 C193.19 33.85, 197.76 41.35, 199.21 48.59 C200.66 55.83, 199.21 64.15, 195.04 70.9 C190.88 77.65, 183.58 83.96, 174.21 89.06 C164.84 94.17, 151.37 98.41, 138.83 101.52 C126.28 104.62, 112.18 107.6, 98.96 107.71 C85.74 107.83, 71.7 105.25, 59.5 102.18 C47.3 99.12, 34.98 94.53, 25.75 89.31 C16.52 84.09, 8.42 77.71, 4.11 70.86 C-0.2 64.01, -1.52 55.45, -0.12 48.23 C1.27 41.01, 5.76 33.98, 12.49 27.55 C19.23 21.12, 29.26 14.06, 40.27 9.65 C51.29 5.25, 65.02 2.62, 78.6 1.13 C92.18 -0.36, 114.31 0.58, 121.74 0.71 C129.18 0.84, 123.56 0.76, 123.2 1.89 M71.74 3.4 C83.58 0.83, 101.13 0.9, 114.56 1.57 C128 2.25, 141.28 3.65, 152.33 7.45 C163.38 11.25, 173.21 18.29, 180.85 24.37 C188.5 30.45, 195.67 37.04, 198.2 43.95 C200.74 50.86, 199.74 58.82, 196.09 65.85 C192.43 72.88, 184.45 80.07, 176.27 86.13 C168.1 92.18, 158.82 98.68, 147.05 102.18 C135.27 105.67, 119.52 106.9, 105.63 107.1 C91.75 107.3, 76.46 106.09, 63.75 103.37 C51.05 100.66, 38.67 95.76, 29.39 90.83 C20.11 85.9, 13.01 80.34, 8.08 73.79 C3.15 67.24, -0.49 58.66, -0.19 51.51 C0.11 44.36, 4.08 37.21, 9.87 30.88 C15.66 24.55, 24.03 18.27, 34.56 13.53 C45.09 8.79, 66.58 4.07, 73.03 2.44 C79.49 0.81, 73.12 2.81, 73.28 3.73" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1286.2762084781152 51.169787206519686) rotate(0 14.866666793823242 12.5)"><text x="14.866666793823242" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">GE</text></g></svg>
@@ -0,0 +1,8 @@
1+<?xml version="1.0" standalone="no"?>
2+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1132.5000610351562 410" width="1132.5000610351562" height="410"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
4+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAASIABEAAAAADLwAAAQtAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgkiCMQsGAAE2AiQDCAQgBYJeByAMFBtyC8g+DPBgOMHr2CSamI5V95UebojsUX0LPy5Xqw7Np/K+XqczZra2OiMzPXJm7dtWFsAJmnFmpRvII/x5eLrM92f2DltPs9qAYr2D5fAAI54ILGhAAxSQTFzu51jnr1Fp5BMwMHzYgNMgXGQYyK+FuEwAwW2LU3J2peje/3D+ha1ay5Xft8/uhQQ07vfr5snYN4ZJAmBYKBQmUTKKNLkY8TJWx/ic9hl0NyGYd/1KQIAlAAACBCEEMDdjHHKYU1QFUwWAAUDP+zTfiANFkACZxK+XWIIAIYyRwwECTB2p6D63FmlTMpfQqYaATrD2XSR7nt9HqAj/AWMEBECBIyqgSbQAURXDuWHA6p/6loCRjvsjSwBBRzqYc6WfkNVcJ4aVwDk7BkZ+awrWAa4xlq1m9ZGWYB3Qmg5wRQ7WAa+xnD7qnVOheHKmMS2/Q2M5rKe1o0/0xtHGb3VqPJT14X6vsj487uW+NC7ZVzo5TwjWgazBxVMaZzmsdzbvjZLtfxvoWiF8hvqUKeVK39JTwpksekGWWXbfuTLFn2VJMudmETsli8atRarreYFXsRVSIFbIVrIoaXJNK1U8ZXhGY2ue3HxUJ6CatLqOyYfUO1snS8ua+0s9ZQl9xVP2lLkk86xgHeRaYaWSnSUiNAqz1OuGBqEhBBoMp/3PMjJH52UIECVBJ6nSBHhb+rfw3KJMUAQVGlf9rzOyQTdlWLAlS6kOEF2CJ/gIuO//kJEjeiwjQSolSs2AmBMKoUTFS//XjNzQWxkdeqlT6gA8xx4AavWTge+0ljlGQVGUmIwNQEmMv7YdJLLznGs2E2mLhf/9uzaNLLvvKbe8N+F1XV3Wt4x0Jd/2Ydbv3Lm+25IZxM9snKwRqSZto7nPlMx9ka2KLkonLSxWRG+C0TDVnGuq7hcuDptLq7aaO9+5c/47VZPaRgiRfFu9N8H4jma1a8tDdrhsOGC8OPjTg8tR2VryvfD7Myh32ZtFB14Tc8Y/2EJPL6Nf/DSRuZk/vb42bpWk7Vboweo6cvGxTbInJceEq6Nyh0tAYelu1/IGk/hdruvTg0+GrNqlb/yNt0oj1nYZ+ZqLzrVGfzZaux/xqGgRybsP4vp0ljo9TT7xSWbHTpf1QQAAEEBn/MdeTpGabZK+gX4AePDVCwDwejVdb0iLKwdgKgGA8P+piP89+v9AcBJoAfpnmy2E9Nki5qQYIRPOeyYeUVGYAQI8yu2h44o9qSnt2QbtetFvr5iyz1aN4wEKVaspJmqlqpSpRqfpZlBNMRkTKUS4cImydGrXaZI2OGOiBLFGhDA/AvM542czZZoOs60ppjSY8BWKYX4jQkwty+KnRQnWRjXzFHnG75fAsxWw0W3WyDunz4ty8xRTzXNXdesx8/rBk77JFFHkqkU54QwJ09UVqxIeFFA1IBAAAAA=); }
5+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
6+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
7+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
8+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="1132.5000610351562" height="410" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 276.66668701171875) rotate(0 115.83331298828125 58.333343505859375)"><path d="M29.17 0 C75.2 -3.49, 125.88 -0.44, 202.5 0 M29.17 0 C71.93 -0.19, 115.78 -0.44, 202.5 0 M202.5 0 C220.61 0.21, 232.66 10.4, 231.67 29.17 M202.5 0 C222.21 -0.26, 229.62 11.06, 231.67 29.17 M231.67 29.17 C232 43.39, 233.32 53.37, 231.67 87.5 M231.67 29.17 C231.92 44.48, 231.55 59.82, 231.67 87.5 M231.67 87.5 C230.05 106.09, 223.41 116.04, 202.5 116.67 M231.67 87.5 C231.91 105.84, 220.61 117.69, 202.5 116.67 M202.5 116.67 C155.22 118.39, 112.03 118.95, 29.17 116.67 M202.5 116.67 C162.39 117.42, 119.8 118.59, 29.17 116.67 M29.17 116.67 C8.43 117.76, -0.06 107.04, 0 87.5 M29.17 116.67 C10.38 116.92, 0.63 106.82, 0 87.5 M0 87.5 C1.39 63.33, -1.21 44.68, 0 29.17 M0 87.5 C0.82 75.91, -0.32 63.18, 0 29.17 M0 29.17 C-1.3 11.25, 11.39 -1.87, 29.17 0 M0 29.17 C-0.19 11.17, 7.72 1.89, 29.17 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(77.16331481933594 310.0000305175781) rotate(0 48.66999816894531 25)"><text x="48.66999816894531" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">算子代码</text><text x="48.66999816894531" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(原型定义)</text></g><g stroke-linecap="round" transform="translate(420 261.6666564941406) rotate(0 147.9166259765625 69.16667175292969)"><path d="M198.89 3.13 C214.91 4.61, 229.67 9.88, 242.62 15.15 C255.56 20.43, 268.15 27.86, 276.58 34.76 C285.01 41.66, 290.47 48.77, 293.21 56.58 C295.96 64.4, 295.72 73.99, 293.04 81.66 C290.37 89.32, 285.44 95.74, 277.16 102.56 C268.89 109.38, 256.55 117.21, 243.39 122.59 C230.23 127.98, 214.03 132.4, 198.22 134.88 C182.41 137.37, 165.39 137.58, 148.54 137.51 C131.7 137.43, 112.87 136.95, 97.16 134.45 C81.45 131.95, 66.98 127.57, 54.26 122.49 C41.55 117.41, 29.52 110.81, 20.87 103.96 C12.21 97.1, 5.47 89.03, 2.35 81.37 C-0.76 73.7, -0.73 65.82, 2.18 57.96 C5.09 50.1, 11.35 41.15, 19.8 34.2 C28.25 27.24, 39.89 21.2, 52.87 16.22 C65.84 11.24, 81.84 7.11, 97.64 4.33 C113.45 1.55, 129.26 -0.73, 147.69 -0.46 C166.13 -0.19, 196.82 4.25, 208.24 5.98 C219.67 7.7, 217.22 8.83, 216.23 9.91 M150.29 1.25 C166.38 0.44, 185.64 2.59, 201.59 5 C217.53 7.41, 233.56 10.36, 245.97 15.71 C258.37 21.07, 268.19 30.07, 276.01 37.13 C283.83 44.18, 290.05 50.42, 292.9 58.06 C295.75 65.69, 295.94 75.04, 293.09 82.94 C290.24 90.84, 284.45 98.59, 275.8 105.46 C267.14 112.34, 254.26 119.4, 241.16 124.18 C228.07 128.95, 213.15 131.59, 197.25 134.11 C181.34 136.63, 162.86 139.62, 145.73 139.32 C128.6 139.03, 110.1 135.31, 94.49 132.34 C78.87 129.37, 64.61 126.7, 52.06 121.5 C39.5 116.31, 27.63 108.28, 19.16 101.17 C10.68 94.06, 3.88 86.18, 1.22 78.84 C-1.45 71.5, -0.19 64.64, 3.17 57.12 C6.53 49.61, 12.93 40.52, 21.4 33.74 C29.87 26.95, 41.03 21.23, 54 16.41 C66.97 11.59, 83.01 7.62, 99.22 4.83 C115.42 2.04, 142.51 0.07, 151.21 -0.31 C159.91 -0.68, 151.43 1.33, 151.42 2.58" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(547.7237763168312 318.42510561846973) rotate(0 20.100000381469727 12.5)"><text x="20.100000381469727" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">构建</text></g><g stroke-linecap="round" transform="translate(890.8334350585938 270.8333435058594) rotate(0 115.83331298828125 58.333343505859375)"><path d="M29.17 0 C91.51 -0.84, 157.37 0.79, 202.5 0 M29.17 0 C78.29 -0.73, 128.85 0.09, 202.5 0 M202.5 0 C223.72 -1.08, 231.78 7.82, 231.67 29.17 M202.5 0 C219.82 -0.69, 232.21 8.28, 231.67 29.17 M231.67 29.17 C232.62 52.81, 230.88 75.18, 231.67 87.5 M231.67 29.17 C232.14 43.64, 232.27 55.69, 231.67 87.5 M231.67 87.5 C233.11 105.48, 223.03 116.99, 202.5 116.67 M231.67 87.5 C233.85 106.77, 221.08 116.43, 202.5 116.67 M202.5 116.67 C145.96 117.56, 94.83 119.64, 29.17 116.67 M202.5 116.67 C139.64 117.89, 78.51 116.55, 29.17 116.67 M29.17 116.67 C8.54 117.19, 0.01 107.39, 0 87.5 M29.17 116.67 C11.94 115.31, -0.71 105.14, 0 87.5 M0 87.5 C-0.45 67.75, -0.61 45.77, 0 29.17 M0 87.5 C-0.64 64.53, -0.41 42.81, 0 29.17 M0 29.17 C-0.55 7.88, 9.69 -0.72, 29.17 0 M0 29.17 C2.01 9.47, 9.34 -0.09, 29.17 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(978.4367485046387 316.66668701171875) rotate(0 28.229999542236328 12.5)"><text x="28.229999542236328" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Run包</text></g><g stroke-linecap="round" transform="translate(442.50006103515625 10) rotate(0 115.83331298828125 58.333343505859375)"><path d="M29.17 0 C70.83 -0.73, 114.6 -1.2, 202.5 0 M29.17 0 C92.56 1.89, 155.86 1.69, 202.5 0 M202.5 0 C221.11 0.93, 229.86 10.89, 231.67 29.17 M202.5 0 C222.12 -1.65, 230.96 8.8, 231.67 29.17 M231.67 29.17 C230.25 46.44, 231.1 59.33, 231.67 87.5 M231.67 29.17 C231.24 45.94, 231.44 63.86, 231.67 87.5 M231.67 87.5 C231.68 107.22, 223.08 118.35, 202.5 116.67 M231.67 87.5 C229.44 108.96, 220.02 117.75, 202.5 116.67 M202.5 116.67 C146.62 116.43, 89.7 116.63, 29.17 116.67 M202.5 116.67 C161.87 115.74, 120.81 115.23, 29.17 116.67 M29.17 116.67 C9.13 116.69, -0.84 105.2, 0 87.5 M29.17 116.67 C9.53 118.53, -1.42 105.02, 0 87.5 M0 87.5 C-1.33 76.12, 1.08 62.35, 0 29.17 M0 87.5 C0.04 71.21, 1.18 54.75, 0 29.17 M0 29.17 C-0.85 9.73, 8.72 0.89, 29.17 0 M0 29.17 C-0.03 11.39, 11.87 -1.13, 29.17 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(487.9833755493164 55.833343505859375) rotate(0 70.3499984741211 12.5)"><text x="70.3499984741211" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">各版本原型信息</text></g><g mask="url(#mask-9iCKlKfktQUwhEKWrdt6N)" stroke-linecap="round"><g transform="translate(244.166748046875 334.166748046875) rotate(0 85.41668701171875 0)"><path d="M-0.47 -0.33 C28.1 0.05, 142.7 1.16, 171.38 1.18 M1.49 -1.55 C29.94 -1.37, 142.42 -0.75, 170.72 -0.32" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(244.166748046875 334.166748046875) rotate(0 85.41668701171875 0)"><path d="M147.14 8 C153.69 6.52, 163.23 4.41, 170.72 -0.32 M147.14 8 C153.83 5.42, 161 3.73, 170.72 -0.32" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(244.166748046875 334.166748046875) rotate(0 85.41668701171875 0)"><path d="M147.31 -9.1 C153.65 -5.49, 163.14 -2.5, 170.72 -0.32 M147.31 -9.1 C154 -6.82, 161.13 -3.65, 170.72 -0.32" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-9iCKlKfktQUwhEKWrdt6N"><rect x="0" y="0" fill="#fff" width="515.0001220703125" height="434.166748046875"></rect><rect x="325.2934350967407" y="321.666748046875" fill="#000" width="8.579999923706055" height="25" opacity="1"></rect></mask><g transform="translate(325.2934350967407 321.666748046875) rotate(0 4.327646260708548 12.315058417846444)"><text x="4.289999961853027" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">1</text></g><g mask="url(#mask--Nddxj89NiLap9I6M2dVs)" stroke-linecap="round"><g transform="translate(513.3333740234375 128.33340454101562) rotate(0 0 68.33332824707028)"><path d="M-0.7 -0.71 C-0.54 22.14, 0.26 114.46, 0.2 137.16 M1.14 1.54 C1.22 24.02, -0.66 112.85, -0.64 135.3" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(513.3333740234375 128.33340454101562) rotate(0 0 68.33332824707028)"><path d="M-8.93 111.71 C-8.1 117.76, -4.11 121.34, -0.64 135.3 M-8.93 111.71 C-6.98 115.94, -5.22 121.12, -0.64 135.3" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(513.3333740234375 128.33340454101562) rotate(0 0 68.33332824707028)"><path d="M8.17 111.9 C4.89 117.81, 4.77 121.34, -0.64 135.3 M8.17 111.9 C6.63 116.02, 4.9 121.16, -0.64 135.3" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask--Nddxj89NiLap9I6M2dVs"><rect x="0" y="0" fill="#fff" width="613.3333740234375" height="365.0000610351562"></rect><rect x="509.0433740615845" y="184.16673278808594" fill="#000" width="8.579999923706055" height="25" opacity="1"></rect></mask><g transform="translate(509.0433740615845 184.16673278808594) rotate(0 4.513121305362461 12.393343359976996)"><text x="4.289999961853027" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">1</text></g><g mask="url(#mask-lZ3RRtyRZGJqyO7MYmhig)" stroke-linecap="round"><g transform="translate(715.8333740234375 330.8333740234375) rotate(0 83.33331298828125 0)"><path d="M0.98 -0.54 C29.05 -0.31, 140.22 1.09, 167.85 1.04 M0.04 1.79 C28.1 1.73, 139.86 -0.24, 167.53 -0.54" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(715.8333740234375 330.8333740234375) rotate(0 83.33331298828125 0)"><path d="M144.16 8.35 C149.23 7.87, 157.8 3.83, 167.53 -0.54 M144.16 8.35 C148.77 5.89, 154.88 4.92, 167.53 -0.54" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(715.8333740234375 330.8333740234375) rotate(0 83.33331298828125 0)"><path d="M143.92 -8.75 C148.99 -4.88, 157.63 -4.57, 167.53 -0.54 M143.92 -8.75 C148.72 -7.35, 154.89 -4.45, 167.53 -0.54" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-lZ3RRtyRZGJqyO7MYmhig"><rect x="0" y="0" fill="#fff" width="982.5" height="430.8333740234375"></rect><rect x="792.1366868019104" y="318.3333740234375" fill="#000" width="14.0600004196167" height="25" opacity="1"></rect></mask><g transform="translate(792.1366868019104 318.3333740234375) rotate(0 7.6418359021237166 13.12124980536288)"><text x="7.03000020980835" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">2</text></g><g mask="url(#mask-RtS4JlKa3wdRG514sZP5q)" stroke-linecap="round"><g transform="translate(627.5 264.1667175292969) rotate(0 0 -65)"><path d="M-1.02 -0.69 C-0.9 -22.55, 0.79 -108.94, 0.99 -130.41 M0.64 1.56 C0.67 -20.2, 0.75 -106.9, 0.56 -129.09" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(627.5 264.1667175292969) rotate(0 0 -65)"><path d="M9.19 -105.63 C5.12 -111.6, 2.8 -120.53, 0.56 -129.09 M9.19 -105.63 C5.75 -113.2, 3.13 -122.62, 0.56 -129.09" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(627.5 264.1667175292969) rotate(0 0 -65)"><path d="M-7.92 -105.57 C-6.49 -111.41, -3.3 -120.36, 0.56 -129.09 M-7.92 -105.57 C-5.51 -113.11, -2.27 -122.55, 0.56 -129.09" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-RtS4JlKa3wdRG514sZP5q"><rect x="0" y="0" fill="#fff" width="727.5" height="494.1667175292969"></rect><rect x="620.4699997901917" y="186.66671752929688" fill="#000" width="14.0600004196167" height="25" opacity="1"></rect></mask><g transform="translate(620.4699997901917 186.66671752929688) rotate(0 7.012761051207804 13.074613298908815)"><text x="7.03000020980835" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">2</text></g></svg>
@@ -0,0 +1,10 @@
1+<?xml version="1.0" standalone="no"?>
2+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2226.3332628522603 780.8333206176758" width="2226.3332628522603" height="780.8333206176758"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
4+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAS8ABEAAAAADUwAAARkAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhxGBmAANAgKCY4uERAKgySCcwsMAAE2AiQDDgQgBYJeByAMFBviC8gGHng8q/eTtB46HXrlTodqRu6anT1nDkbPOZqx+v30y78JywgHbFxe5l9IRtgYkxd+AYC6OiJhUJhWyVoC26pKQFVhTL+VXebGoK2I3+P1RxCAGwCQEICCQABOUklFeH1NXdhRAEwToCd2OsUakf3LKK8PQWAoAPbnWc3/EUjIKMjyi+JkLCAhAWJzbDWoFvYVkrAiC8cPcyRf1OSv7WWlaTcd8mZzM8ibOXlEERd98AZIFul/QMUCSIAMxCIjwKKgQpHF3HSYJoe9+E/fKrAQi/srDShuNHC3+W8W4kTNEOZRBt60u3AjDw+VGIhiVa0JeENipMRAKjYQhZ4SA7lY9YXkHF+HP0tTdVWvn9BVnzozOhFScghvfNKkrpWpITr9ATVEl98TWqml2DsmNW1xiYGyhlap6Rq01bWztWs5fcv/SgwsxY1qSM5t87f7Q0FvSmilV0vxeNSa0INt/tCD3hSPppUYWE/J4/GBQOJ5YatbC2nJvoLo5JyONF0v1bI8sEHXU/QszTzREDD9yqbB5NVyTo0hgm3NC8EsTwquZXnkdVqKR/OWGDiKGzv9NV5k9mjC+brRsevtjAturSv0YRI5nB6hIBJRmkhjtLySIVDwb/HcbAwhlolDvDYu9AkSOZGepCAZKZpktaYiNo2QzmRA1WaE3iORM+lZCrKRo8lWay5i8wj5TAEKtQWhL5LIxfQSBaUo05SqtRz5V7woIGNHIhFhmsgAWABwAgpwFGAAlEFJuO+S5cnI3OPMvf/511/33eHUX32163Snnntm8nlFb7zRu2Dutde6z4HE09fl6j1nCpFylsuVc1e995prrqveel1BnKHxCdsf3XNm/Os9r4tZlm3KX85qBMcls6Wnd98hRNEr7bPLxOzrTqlwGctczjU9gq/CP7H09IUjPdb++Wc2507mdmwpD+/krNr2OiPSuvCiqOqo5mW3drWK0Pxd9ivqdvX/mGQ59Rw+WxO8+/HzL4iynvZWlHVRy9Dy1bENiSsKj4o8sfjrhanKovOjra/3rryyst3xJ/PLl3x019S6gkDu6JRd2jbwYH1jV7ql4Nxo66mB9qlVZ3V0LDht++x5+nXfsbfam21NPWJBe5T31aW1FcPV5zW07Wl+3DVRjvrremeSu7J3jKY5Wgtn24ZnnnnI1wY5teDEu9dcNxyx9De7S/4S4M3Lvs8G+KQo51TzU7NA+VfeAtiRZqQ/UDXltx7T/98eR+BwnGS7v2Qpq6WTaVM2i/QNeWVGypU6CTxkow8ZoTiAQt7OXYJYHndJhGO4ZErR9yr9Lgu7iRZW4+vAT4BRNrGeUQJ0soYeJtnKNgJsYiMqVZRSQQVL8DLJOJNsYAzOUqmmGJVKyv2EUfSNX9zOGraCGE2xaahSsUK53B9WMr8m1Ph01ZQwRoDtpyiq4miLheiA4TQ7Rh66dR4Xtk1sZo9vgGlm2L73mpOeqdKEn1p6kXHimZspZ2aQX6SQjlg4GxQB); }
5+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAASYABEAAAAADQgAAARAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgxSCYAsGAAE2AiQDCAQgBYJeByAMFBuhC8iO0UvPO0mZYoRJipmLh//fr98+935RaTPv6+ouDbFQJyJWWVNJVDy0gZToHgrJ3lBeNrNZO8WkILNbanNetmkPYnowcs6JP+NFvir//+c0sje/ZCscsHH9PXklY2tMfhElwVgBCoXCbErtzEYPWBO5KT3pF+s2qldpsPJPU6ALKNpJGAcdpn4TuGevbARiTVCWAAOn53w/lgMBSULUEnsDpIR4WQohyOECRLXZdHa9pAUU1B/gJ8VG9tWAXAPLh/DhtnfPAEjNvF7MESAhYwgmEhvfHJoMMak/6OtjrbGrQ0s0G8I/sgEUpxyQXzmOQ7iU4mDfPA6Q0+fI5XuDYjmwQMhGkywcEsvhFRxYIWI5WIHsLBZqr3cEU4iZY449DLKjNqeH5YcmovVeXoaKR6yG6zRiNV4n2C0Kd7Z5KSorlsPfgvHXMDeQHbUvZu2CFHpGvJWgqEBsDqt11DnYmSTObpEUThDIxl6tdbBXSZygqFiO8JIi6U6jzdeFqCGskLJ4g0IDE6RDMUylHkzAdQyDM4uUdSQXgJoKWpzZK7FQGwdn1raPZgYTOLpIMBFMUDhBkbEcSVHR4LCRQqUCFqSfGx+ITWJOBjmTRV4hkZV0lQI1NLLaojUUcEI9/1vem9cR9JwBRmaIvEkim+kWBVbgslWvfoD3JwRwgUAsMPKERA6iBysIQagcotcwwIcTIrhIRLHIyEdL5Bh6rII4xMtxek0AwYlXBUDWJhkDyz6QQeJWmiRe4D2gKZVcvDcgObKDMTafh3CTrGkNmKlff/sM7PdY39y2NmaFP5N1RtK640oKw4Pev+9ca9waLc1hawMPb2qRnoHr8HBZ0LrRdZ2hW+zpDF3D/KajufFWZyrFSzUs3hw5d+FavRUfMWp6Ft04Xc003KfBTP3jxjtPykb9d8anzY/jPaLZJanOEPFa/5FNbVKhcd3GjNHRvD0d2HbVhqNK/eEtLMKueaPi84Rt1aGKW69U2l5DW8Hvc2ww1v8AjNo4trK+A8JWujFEsDJyWEhA5ydT5v3Eazkdm0wrJw0kBlsbnIc3mVf90W1uhczKF+8/ZW4aXXU02qYzrfxotmWQSYfLVBfOn9OlH4wlmqTD0m2uOv6wiCFbxHGfNcsfE+PKVvb/fX1Pnop0SzfVDVbl/BfLsE8AX17/CAGAr9XQleW3vsim7jwKAG0SCH5L9abfA9beb4cFN4UW5V/y2WJKX4VjFpV1mXZPa3UTJpokgIqXhScMue1JejQ82TJmZ9Owp9l92kKL+TrgOprTCEM50RoUa+Y12hi0EYZDksVJlCgbycvNaxgXnEdSxLB2koRAhSX79Pmxio2GBWeGEW0kcYNKQtBOktYooORkKWK50MZeooT4wbJ4oR62W42buO/oZYI7RhhpUiCtVZuxOw9cVBOp5FCiBcZNVNYkGDRARDVAAPSQNkEV); }
6+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
7+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
8+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
9+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
10+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="2226.3332628522603" height="780.8333206176758" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(1542.3334764753072 171.53568594796332) rotate(0 336.99989318847656 148.27381134033203)"><path d="M32 0 C248.05 -1.18, 463.23 -1.71, 642 0 M642 0 C662.76 -1.33, 673.53 10.72, 674 32 M674 32 C675.99 87.85, 675.61 142.97, 674 264.55 M674 264.55 C675.49 284.41, 663.98 298.49, 642 296.55 M642 296.55 C449.05 297.76, 256.76 297.99, 32 296.55 M32 296.55 C9.02 295.5, 1.98 284.4, 0 264.55 M0 264.55 C-2.24 196.17, -1.7 129.56, 0 32 M0 32 C-0.5 11.64, 9.87 -0.58, 32 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(1753.3333696637837 176.53568594796332) rotate(0 126 17.5)"><text x="126" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">算子包打包(原生)</text></g><g stroke-linecap="round" transform="translate(10 386.6666793823242) rotate(0 721.6666412353516 192.08332061767578)"><path d="M32 0 C525.89 -5.55, 1020.93 -4.74, 1411.33 0 M1411.33 0 C1433.24 -1.91, 1444.75 10.96, 1443.33 32 M1443.33 32 C1442.95 153.95, 1445.23 277.51, 1443.33 352.17 M1443.33 352.17 C1441.4 372.53, 1432.56 385.98, 1411.33 384.17 M1411.33 384.17 C936.6 384.19, 463.92 384.28, 32 384.17 M32 384.17 C9.68 384.92, 1.56 374.12, 0 352.17 M0 352.17 C2.61 253.45, 2.49 153.03, 0 32 M0 32 C-1.72 11.39, 12.53 -1.55, 32 0" stroke="#1971c2" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(532.8749694824219 391.6666793823242) rotate(0 198.7916717529297 17.5)"><text x="198.7916717529297" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">es 系列 API 的生成与编译阶段</text></g><g stroke-linecap="round" transform="translate(16.19031633649547 10) rotate(0 716.4285605294365 170.83332061767578)"><path d="M32 0 C513.48 -3.63, 995.45 -3.04, 1400.86 0 M1400.86 0 C1421.38 1.74, 1433.88 10.97, 1432.86 32 M1432.86 32 C1432.5 140.87, 1432.99 250.35, 1432.86 309.67 M1432.86 309.67 C1432.03 331.69, 1422.41 340.33, 1400.86 341.67 M1400.86 341.67 C1078.9 340.52, 756.3 340.45, 32 341.67 M32 341.67 C9.83 342.12, -0.75 332.85, 0 309.67 M0 309.67 C1.49 241.78, 0.13 175.2, 0 32 M0 32 C-0.27 12.61, 9.44 1.72, 32 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(634.618876865932 15) rotate(0 98 17.5)"><text x="98" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">算子包原生构建</text></g><g stroke-linecap="round" transform="translate(498.5323963165283 152.6341020796034) rotate(0 105.99899056375898 47.50003051757815)"><path d="M65.04 4.4 C77.16 1.41, 94.37 -0.11, 108.63 -0.24 C122.9 -0.37, 137.6 0.84, 150.62 3.63 C163.65 6.41, 177.21 11.49, 186.77 16.47 C196.34 21.45, 203.93 27.21, 208.01 33.51 C212.09 39.81, 213.27 47.81, 211.27 54.26 C209.26 60.71, 203.53 66.81, 195.97 72.2 C188.42 77.59, 177.48 82.93, 165.95 86.59 C154.42 90.26, 140.65 93.14, 126.8 94.19 C112.94 95.23, 97.02 94.39, 82.82 92.87 C68.62 91.35, 53.32 88.72, 41.62 85.06 C29.91 81.41, 19.6 76.56, 12.59 70.93 C5.57 65.3, 0.69 57.71, -0.47 51.27 C-1.64 44.83, 0.73 38.47, 5.6 32.3 C10.47 26.13, 18.34 19.1, 28.76 14.25 C39.17 9.4, 60.45 5.09, 68.1 3.19 C75.75 1.29, 73.86 2.28, 74.64 2.85 M140.22 3.55 C153.78 4.84, 167.28 8.52, 178.1 12.6 C188.91 16.67, 199.43 21.79, 205.09 27.99 C210.75 34.2, 212.46 43.03, 212.05 49.82 C211.64 56.61, 208.93 63, 202.65 68.73 C196.37 74.46, 185.64 80.18, 174.37 84.21 C163.1 88.24, 148.81 91.14, 135.03 92.91 C121.26 94.67, 105.66 95.75, 91.73 94.8 C77.8 93.86, 63.65 90.76, 51.47 87.22 C39.29 83.68, 26.96 78.62, 18.65 73.57 C10.34 68.52, 4.48 63.14, 1.6 56.91 C-1.28 50.69, -2.03 42.78, 1.39 36.24 C4.81 29.7, 13.22 22.94, 22.1 17.66 C30.98 12.37, 42.14 7.53, 54.65 4.52 C67.15 1.51, 82.97 0.12, 97.12 -0.39 C111.27 -0.89, 132.3 0.82, 139.56 1.48 C146.81 2.15, 140.84 2.69, 140.64 3.62" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(549.0967872248182 182.54653891163406) rotate(0 55.48199462890625 17.5)"><text x="55.48199462890625" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">gcc 编译</text></g><g stroke-linecap="round" transform="translate(818.9582042694092 171.45819282531738) rotate(0 73.74997329711914 33.750022888183594)"><path d="M16.88 0 C46.36 -2.39, 72.26 1.69, 130.62 0 C141.67 -0.5, 146.62 2.43, 147.5 16.88 C146.96 25.52, 144.83 38.68, 147.5 50.63 C150.48 64.95, 139.47 64.13, 130.62 67.5 C87.43 67.46, 46.31 65.49, 16.88 67.5 C5.32 65.22, -1.75 60.35, 0 50.63 C0.06 37.61, 1.48 34.45, 0 16.88 C1.16 8.69, 8.99 1.62, 16.88 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M16.88 0 C42.84 -0.36, 66.39 1.78, 130.62 0 M16.88 0 C41.27 1.54, 65.37 1.63, 130.62 0 M130.62 0 C140.05 -1.14, 146.77 4.24, 147.5 16.88 M130.62 0 C142.82 -2.01, 146.67 5.2, 147.5 16.88 M147.5 16.88 C145.78 28.33, 148.63 38.26, 147.5 50.63 M147.5 16.88 C146.25 27.37, 146.67 38.53, 147.5 50.63 M147.5 50.63 C146.7 61.43, 143.61 65.93, 130.62 67.5 M147.5 50.63 C147.62 63.78, 143.13 68.92, 130.62 67.5 M130.62 67.5 C102.05 65.35, 73.97 67.13, 16.88 67.5 M130.62 67.5 C102.92 67.16, 74.57 66.54, 16.88 67.5 M16.88 67.5 C6.19 66.09, -0.6 60.12, 0 50.63 M16.88 67.5 C5.33 66.66, -2.26 60.06, 0 50.63 M0 50.63 C-0.12 40.38, 0.41 29.36, 0 16.88 M0 50.63 C0.17 42.21, 0.53 34.95, 0 16.88 M0 16.88 C-0.43 6.86, 5.81 1.69, 16.88 0 M0 16.88 C-0.75 7.86, 3.98 -2.15, 16.88 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(844.8701877593994 187.70821571350098) rotate(0 47.837989807128906 17.5)"><text x="47.837989807128906" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">原型.so</text></g><g stroke-linecap="round"><g transform="translate(401.5513102710929 103.80153567934843) rotate(0 54.72892055338161 36.384673903924295)"><path d="M1.15 -1.04 C19.46 10.91, 91.65 59.35, 109.73 71.78 M0.3 1.02 C18.49 13.08, 90.81 61.04, 108.93 72.79" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(401.5513102710929 103.80153567934843) rotate(0 54.72892055338161 36.384673903924295)"><path d="M84.6 67.04 C89.89 68.93, 97 70.48, 108.93 72.79 M84.6 67.04 C92.44 68.37, 101.74 70.32, 108.93 72.79" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(401.5513102710929 103.80153567934843) rotate(0 54.72892055338161 36.384673903924295)"><path d="M93.99 52.75 C96.58 58.85, 100.98 64.54, 108.93 72.79 M93.99 52.75 C98.46 59.28, 104.38 66.37, 108.93 72.79" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(404.5777080165881 257.2255510495968) rotate(0 46.71033731546038 -22.889518400456097)"><path d="M0.28 -0.99 C15.69 -8.33, 78.1 -37.74, 93.63 -45.06 M-1.04 1.1 C14.13 -6.49, 77.16 -38.82, 92.8 -46.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(404.5777080165881 257.2255510495968) rotate(0 46.71033731546038 -22.889518400456097)"><path d="M75.78 -28.49 C81.02 -35.43, 90.61 -42.93, 92.8 -46.81 M75.78 -28.49 C81.86 -35.85, 88.91 -42.79, 92.8 -46.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(404.5777080165881 257.2255510495968) rotate(0 46.71033731546038 -22.889518400456097)"><path d="M67.99 -43.71 C76.18 -44.64, 88.86 -46.11, 92.8 -46.81 M67.99 -43.71 C76.8 -45.41, 86.73 -46.73, 92.8 -46.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(711.5299720694011 202.5470930853129) rotate(0 49.93260365384606 1.2047736138973733)"><path d="M0.21 0.72 C16.82 1.42, 83.51 3.07, 99.93 3.24 M-1.14 0.05 C15.3 0.5, 81.98 1.11, 99.02 1.55" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(711.5299720694011 202.5470930853129) rotate(0 49.93260365384606 1.2047736138973733)"><path d="M75.39 9.71 C84.28 7.14, 92.1 2.57, 99.02 1.55 M75.39 9.71 C81.57 7.01, 86.55 5.72, 99.02 1.55" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(711.5299720694011 202.5470930853129) rotate(0 49.93260365384606 1.2047736138973733)"><path d="M75.67 -7.39 C84.33 -4.43, 92.06 -3.48, 99.02 1.55 M75.67 -7.39 C81.73 -5.93, 86.63 -3.07, 99.02 1.55" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(45.418411363294126 532.2055761506583) rotate(0 73.23448893902787 49.16666412353516)"><path d="M24.58 0 C61.76 1.19, 94.16 -3.1, 121.89 0 C141.75 -1.52, 149.46 11.65, 146.47 24.58 C142.73 40.02, 147.5 51.55, 146.47 73.75 C144.87 90.78, 139.57 95.62, 121.89 98.33 C91.52 95.3, 57.74 101.44, 24.58 98.33 C10.3 100.38, 1.82 91.19, 0 73.75 C-0.21 57.7, -2.23 44, 0 24.58 C-2.18 11.22, 7.61 -1.52, 24.58 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M24.58 0 C45.31 0.32, 66.01 -0.01, 121.89 0 M24.58 0 C47.03 0.53, 69.62 -0.07, 121.89 0 M121.89 0 C137.27 -0.01, 144.58 6.98, 146.47 24.58 M121.89 0 C139.32 0.37, 145.78 8.25, 146.47 24.58 M146.47 24.58 C147.44 41.5, 148 60.85, 146.47 73.75 M146.47 24.58 C146.22 37.66, 146.34 52.24, 146.47 73.75 M146.47 73.75 C145.01 90.79, 136.51 99.94, 121.89 98.33 M146.47 73.75 C147.56 88.64, 139.1 100.53, 121.89 98.33 M121.89 98.33 C96.55 97.25, 73.08 99.4, 24.58 98.33 M121.89 98.33 C91.31 98.73, 60.4 100.01, 24.58 98.33 M24.58 98.33 C6.28 98.87, 0.8 88.34, 0 73.75 M24.58 98.33 C9.42 96.49, 1.75 91.35, 0 73.75 M0 73.75 C-0.14 59.94, 1.62 44.25, 0 24.58 M0 73.75 C0.32 55.67, -0.45 35.19, 0 24.58 M0 24.58 C-0.01 8.72, 7.61 -1.72, 24.58 0 M0 24.58 C-1.21 7.17, 8.75 0.29, 24.58 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(62.652900302321996 546.3722402741935) rotate(0 56 35)"><text x="56" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">历史原型</text><text x="56" y="59.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text></g><g stroke-linecap="round" transform="translate(426.20098544653047 525.688578354848) rotate(0 101.4156699460832 56.5)"><path d="M106.86 -0.23 C119.96 -0.8, 134.89 2.17, 147.05 5.5 C159.21 8.82, 171.24 13.64, 179.83 19.73 C188.42 25.81, 194.93 34.5, 198.6 41.99 C202.27 49.49, 203.8 57.1, 201.84 64.69 C199.88 72.28, 194.31 80.97, 186.83 87.52 C179.35 94.08, 168.36 99.94, 156.96 104.02 C145.56 108.09, 131.83 110.68, 118.44 111.99 C105.04 113.3, 90.01 113.74, 76.59 111.86 C63.17 109.99, 48.68 105.69, 37.91 100.74 C27.13 95.79, 18.36 89.01, 11.94 82.16 C5.51 75.3, 0.29 67.34, -0.64 59.62 C-1.57 51.9, 1.35 43.13, 6.38 35.85 C11.42 28.56, 19.77 21.16, 29.59 15.91 C39.4 10.66, 52.03 6.91, 65.29 4.35 C78.55 1.79, 101.01 1.11, 109.17 0.55 C117.33 -0.01, 114.15 0.11, 114.25 0.99 M67.4 3.75 C79.47 0.8, 95.82 1.22, 109.57 1.56 C123.31 1.89, 137.68 2.24, 149.87 5.78 C162.05 9.31, 174.6 16.56, 182.67 22.78 C190.75 29.01, 195.14 36.13, 198.34 43.15 C201.55 50.17, 203.91 57.6, 201.92 64.88 C199.92 72.16, 193.96 80.11, 186.38 86.82 C178.8 93.54, 168.2 100.83, 156.43 105.16 C144.65 109.5, 129.35 111.89, 115.73 112.84 C102.12 113.78, 87.83 112.77, 74.73 110.83 C61.64 108.88, 47.87 105.85, 37.18 101.15 C26.49 96.45, 16.98 89.77, 10.59 82.63 C4.21 75.5, -0.57 65.97, -1.13 58.32 C-1.7 50.68, 2.1 43.97, 7.22 36.75 C12.34 29.53, 19.69 20.49, 29.59 15 C39.48 9.52, 60.37 5.8, 66.58 3.83 C72.79 1.86, 66.39 2.5, 66.84 3.21" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(473.30896967195827 547.237045217808) rotate(0 54.095977783203125 35)"><text x="54.095977783203125" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb</text><text x="54.095977783203125" y="59.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">codegen</text></g><g stroke-linecap="round" transform="translate(1224.8745925566595 545.4534844292535) rotate(0 102.91665267944336 33.750022888183594)"><path d="M16.88 0 C60.92 -5.17, 104.54 -6.17, 188.96 0 C201.3 1.57, 204.1 4.03, 205.83 16.88 C206.92 24.07, 205.72 39.5, 205.83 50.63 C202.96 60.8, 203.48 69.61, 188.96 67.5 C128.48 70.46, 62.95 68.71, 16.88 67.5 C5.62 65.78, 2.32 59.69, 0 50.63 C1.67 38.55, 0.19 24.07, 0 16.88 C1.84 5.89, 8.08 2.54, 16.88 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M16.88 0 C71.61 -0.2, 123.61 -0.64, 188.96 0 M16.88 0 C68.87 1.21, 119.65 1.07, 188.96 0 M188.96 0 C201.3 -0.42, 206.48 6.7, 205.83 16.88 M188.96 0 C199.61 1.88, 207.44 5.22, 205.83 16.88 M205.83 16.88 C204.41 27, 205.78 36.41, 205.83 50.63 M205.83 16.88 C206.01 27.44, 205.89 40.26, 205.83 50.63 M205.83 50.63 C204.75 63.43, 200.18 66.1, 188.96 67.5 M205.83 50.63 C204.6 60.8, 201.45 67.98, 188.96 67.5 M188.96 67.5 C122.17 70.53, 59.03 66.7, 16.88 67.5 M188.96 67.5 C133.27 65.15, 77.28 66.48, 16.88 67.5 M16.88 67.5 C5.7 68.03, 1.5 61.86, 0 50.63 M16.88 67.5 C6.91 69.52, 0.4 63.85, 0 50.63 M0 50.63 C1.83 41.51, -1.17 35.78, 0 16.88 M0 50.63 C-0.43 39.17, 0.34 28.73, 0 16.88 M0 16.88 C1.06 5.12, 6.09 1.57, 16.88 0 M0 16.88 C1.02 6.18, 3.91 2.22, 16.88 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1236.8332603117865 561.7035073174371) rotate(0 90.9579849243164 17.5)"><text x="90.9579849243164" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">es构图实现.so</text></g><g stroke-linecap="round" transform="translate(926.076808012454 543.9243644281084) rotate(0 105.99899056375898 47.50003051757815)"><path d="M111.16 0.62 C124.93 0.06, 140.97 2.46, 153.81 5.13 C166.64 7.79, 179.08 11.53, 188.17 16.62 C197.26 21.71, 204.73 29.35, 208.36 35.69 C211.99 42.03, 212.04 48.28, 209.95 54.65 C207.86 61.02, 203.58 68.29, 195.81 73.89 C188.04 79.5, 175.44 85.01, 163.33 88.28 C151.22 91.56, 137.13 92.84, 123.14 93.53 C109.16 94.22, 93.31 93.86, 79.41 92.4 C65.51 90.95, 51.12 88.61, 39.73 84.78 C28.34 80.95, 17.73 75.3, 11.06 69.41 C4.38 63.53, 0.26 56.05, -0.32 49.47 C-0.89 42.88, 2.32 35.7, 7.6 29.9 C12.88 24.1, 21.39 18.99, 31.37 14.68 C41.34 10.37, 52.82 6.48, 67.46 4.03 C82.09 1.59, 109.59 0.47, 119.18 0 C128.76 -0.47, 125.35 0.25, 124.98 1.23 M121.46 1.55 C135.08 1.64, 150.59 3.84, 162.56 7.19 C174.53 10.55, 185.52 16.23, 193.29 21.67 C201.06 27.1, 206.39 33.45, 209.18 39.82 C211.97 46.19, 213.55 53.72, 210.03 59.88 C206.52 66.05, 197.31 71.69, 188.09 76.81 C178.87 81.94, 167.31 87.8, 154.7 90.63 C142.09 93.45, 126.76 93.67, 112.45 93.76 C98.14 93.85, 82.29 93.24, 68.86 91.17 C55.42 89.1, 41.96 85.87, 31.83 81.32 C21.7 76.77, 13.6 70.06, 8.08 63.85 C2.56 57.64, -1.64 50.5, -1.27 44.04 C-0.91 37.58, 3.54 30.87, 10.29 25.09 C17.03 19.32, 27.94 13.13, 39.19 9.37 C50.45 5.61, 64.18 4.11, 77.82 2.53 C91.47 0.96, 113.6 0.35, 121.06 -0.06 C128.51 -0.46, 122.66 -0.8, 122.57 0.1" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(976.6411989207438 573.8368012601392) rotate(0 55.48199462890625 17.500000000000004)"><text x="55.48199462890625" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">gcc 编译</text></g><g stroke-linecap="round"><g transform="translate(851.8639665867083 495.69352669782813) rotate(0 45.11068990912156 34.74683960213363)"><path d="M-0.81 1.12 C14.19 12.61, 74.58 58.18, 89.82 69.46 M0.97 0.67 C15.78 12.3, 73.81 59.47, 88.66 70.99" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(851.8639665867083 495.69352669782813) rotate(0 45.11068990912156 34.74683960213363)"><path d="M64.95 63.04 C73.71 64.82, 78.63 68.47, 88.66 70.99 M64.95 63.04 C71.23 65.12, 76.75 66.9, 88.66 70.99" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(851.8639665867083 495.69352669782813) rotate(0 45.11068990912156 34.74683960213363)"><path d="M75.61 49.66 C81.35 55.24, 83.2 62.75, 88.66 70.99 M75.61 49.66 C79.35 55.04, 82.27 60.07, 88.66 70.99" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(864.6747171896398 709.4202245899335) rotate(0 38.97461352143807 -43.96192108072071)"><path d="M-0.98 0.88 C12.12 -13.8, 65.93 -73.41, 78.9 -88.32 M0.71 0.3 C13.71 -14.19, 65.38 -72.34, 78.46 -86.99" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(864.6747171896398 709.4202245899335) rotate(0 38.97461352143807 -43.96192108072071)"><path d="M69.22 -63.76 C73.72 -69.61, 74.59 -80.54, 78.46 -86.99 M69.22 -63.76 C70.69 -68.69, 73.47 -75.73, 78.46 -86.99" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(864.6747171896398 709.4202245899335) rotate(0 38.97461352143807 -43.96192108072071)"><path d="M56.45 -75.13 C65.07 -77.2, 70.06 -84.45, 78.46 -86.99 M56.45 -75.13 C61 -77.31, 66.93 -81.55, 78.46 -86.99" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1145.4888670532046 590.1772998183977) rotate(0 39.2186734656608 -2.119560739673851)"><path d="M0.8 0.33 C13.73 -0.54, 64.33 -4.18, 77.3 -4.96 M-0.24 -0.55 C13.06 -1.29, 66.38 -3.37, 79.41 -3.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1145.4888670532046 590.1772998183977) rotate(0 39.2186734656608 -2.119560739673851)"><path d="M56.25 5.6 C63.22 0.93, 67.91 0.49, 79.41 -3.81 M56.25 5.6 C63.64 2.93, 69.16 -0.2, 79.41 -3.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1145.4888670532046 590.1772998183977) rotate(0 39.2186734656608 -2.119560739673851)"><path d="M55.62 -11.48 C62.79 -11.41, 67.66 -7.09, 79.41 -3.81 M55.62 -11.48 C63.24 -9.24, 68.94 -7.45, 79.41 -3.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(856.7629134503163 239.39761631332374) rotate(0 -167.20120941737503 140.98368994983403)"><path d="M-1.19 0.24 C-53.05 21.61, -255.05 81.61, -310.75 128.57 C-366.45 175.52, -331.49 256.24, -335.38 281.99 M0.39 -0.68 C-51.68 20.31, -256.17 79.42, -311.73 126.76 C-367.3 174.09, -329.33 257.59, -332.99 283.32" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(856.7629134503163 239.39761631332374) rotate(0 -167.20120941737503 140.98368994983403)"><path d="M-344.25 261 C-340 268.51, -335.62 274.51, -332.99 283.32 M-344.25 261 C-340.82 267.6, -337.07 273.87, -332.99 283.32" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(856.7629134503163 239.39761631332374) rotate(0 -167.20120941737503 140.98368994983403)"><path d="M-327.27 258.99 C-328.72 267.01, -330.05 273.68, -332.99 283.32 M-327.27 258.99 C-328.96 266.35, -330.35 273.24, -332.99 283.32" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1605.2391468176588 298.0237088884627) rotate(0 105.99899056375898 47.50003051757815)"><path d="M108.54 -0.3 C122.2 -1.02, 137.37 1.19, 150.33 3.9 C163.29 6.61, 176.72 11.04, 186.3 15.95 C195.88 20.87, 203.67 27.05, 207.81 33.38 C211.95 39.7, 212.89 47.5, 211.14 53.9 C209.39 60.29, 204.94 66.38, 197.32 71.76 C189.7 77.14, 177.43 82.53, 165.43 86.17 C153.44 89.82, 139.25 92.29, 125.35 93.62 C111.44 94.95, 96 95.52, 82.01 94.15 C68.03 92.78, 53.02 89.36, 41.45 85.39 C29.88 81.43, 19.28 76.1, 12.58 70.37 C5.88 64.65, 2.26 57.5, 1.26 51.06 C0.27 44.61, 1.86 37.86, 6.6 31.73 C11.35 25.59, 19.97 18.99, 29.75 14.23 C39.53 9.48, 50.12 5.61, 65.27 3.2 C80.43 0.79, 109.86 -0.17, 120.66 -0.23 C131.46 -0.3, 130.35 2.02, 130.07 2.79 M136.11 2.43 C149.36 3.59, 163.69 7.69, 174.58 11.9 C185.46 16.11, 195.41 21.94, 201.4 27.69 C207.38 33.43, 210.06 39.76, 210.49 46.39 C210.93 53.01, 209.53 61.26, 204 67.43 C198.48 73.6, 188.07 79.41, 177.32 83.41 C166.58 87.41, 152.86 89.44, 139.54 91.44 C126.23 93.45, 111.68 95.65, 97.43 95.45 C83.17 95.24, 66.58 93.57, 54 90.21 C41.43 86.85, 30.28 80.39, 21.97 75.27 C13.67 70.15, 7.62 65.63, 4.17 59.5 C0.73 53.37, -1.35 45.11, 1.29 38.5 C3.93 31.9, 11.6 25.23, 20.02 19.88 C28.43 14.53, 39.46 9.67, 51.77 6.39 C64.09 3.12, 79.97 1.07, 93.91 0.23 C107.85 -0.61, 128.28 0.82, 135.41 1.36 C142.53 1.9, 136.85 2.65, 136.64 3.48" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1683.2855323548551 327.9361457204934) rotate(0 28 17.5)"><text x="28" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">打包</text></g><g stroke-linecap="round" transform="translate(1975.9405904497426 309.8689836774555) rotate(0 102.91665267944336 33.750022888183594)"><path d="M16.88 0 C63.15 -1.04, 107.78 -2.73, 188.96 0 M16.88 0 C64.45 -0.73, 111.03 -1.04, 188.96 0 M188.96 0 C199.64 -1.23, 204.15 5.14, 205.83 16.88 M188.96 0 C201.14 -1.73, 207.53 4.73, 205.83 16.88 M205.83 16.88 C206.45 29.76, 205.47 38.49, 205.83 50.63 M205.83 16.88 C206.27 27.97, 204.74 39.14, 205.83 50.63 M205.83 50.63 C204.43 63.48, 200.32 66.61, 188.96 67.5 M205.83 50.63 C205.06 64.03, 198.61 65.23, 188.96 67.5 M188.96 67.5 C132.8 68.62, 77.56 68.66, 16.88 67.5 M188.96 67.5 C122.46 67.34, 57.49 67.63, 16.88 67.5 M16.88 67.5 C5.05 68.88, -1.32 60.7, 0 50.63 M16.88 67.5 C6.19 68.17, -1.81 59.64, 0 50.63 M0 50.63 C0.72 39.61, -0.83 30.32, 0 16.88 M0 50.63 C0.47 41.89, -1.22 35.09, 0 16.88 M0 16.88 C1.31 6.18, 7.13 1.96, 16.88 0 M0 16.88 C1.17 5.24, 5.58 -1.21, 16.88 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2014.9332624162953 326.1190065656391) rotate(0 63.923980712890625 17.5)"><text x="63.923980712890625" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ops run包</text></g><g stroke-linecap="round"><g transform="translate(1816.0000130789622 343.6190065656392) rotate(0 77.61906215122781 0.9523664202008604)"><path d="M1.04 0.69 C26.86 1.18, 130.16 2.3, 155.96 2.54 M0.12 0 C25.75 0.18, 129.52 0.15, 155.39 0.75" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1816.0000130789622 343.6190065656392) rotate(0 77.61906215122781 0.9523664202008604)"><path d="M131.82 9.07 C142.14 6.84, 151.22 3.39, 155.39 0.75 M131.82 9.07 C139.85 6.77, 146.08 4.59, 155.39 0.75" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1816.0000130789622 343.6190065656392) rotate(0 77.61906215122781 0.9523664202008604)"><path d="M131.99 -8.03 C142.19 -3.61, 151.19 -0.42, 155.39 0.75 M131.99 -8.03 C140.03 -4.85, 146.2 -1.55, 155.39 0.75" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(399.8394322665322 84.17146926742743) rotate(0 615.3486384320781 112.06234389831793)"><path d="M1 -0.81 C153.16 14.15, 708.7 52.71, 913.58 90.04 C1118.45 127.37, 1177.35 200.84, 1230.26 223.18 M0.06 1.38 C151.98 15.94, 707.52 51.03, 912.39 88.13 C1117.26 125.23, 1176.09 201.16, 1229.27 224" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(399.8394322665322 84.17146926742743) rotate(0 615.3486384320781 112.06234389831793)"><path d="M1204.76 219.07 C1211.95 219.82, 1222.49 221.57, 1229.27 224 M1204.76 219.07 C1210.88 220.6, 1214.62 221.49, 1229.27 224" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(399.8394322665322 84.17146926742743) rotate(0 615.3486384320781 112.06234389831793)"><path d="M1213.66 204.47 C1217.79 210.37, 1225.24 217.19, 1229.27 224 M1213.66 204.47 C1217.85 209.22, 1219.62 213.33, 1229.27 224" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(969.1110156831287 205.23809196835487) rotate(0 322.3809814453125 60)"><path d="M0.61 -0.54 C107.78 19.67, 536.8 100.89, 644.15 120.99 M-0.53 1.79 C106.94 21.7, 539.14 99.44, 646.54 119.39" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(969.1110156831287 205.23809196835487) rotate(0 322.3809814453125 60)"><path d="M621.89 123.59 C630.74 120.78, 643.04 119.99, 646.54 119.39 M621.89 123.59 C630.07 121.44, 636.71 121.61, 646.54 119.39" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(969.1110156831287 205.23809196835487) rotate(0 322.3809814453125 60)"><path d="M624.96 106.76 C632.57 110.62, 643.64 116.48, 646.54 119.39 M624.96 106.76 C632.29 109.84, 637.98 115.21, 646.54 119.39" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(853.1173556357189 485.26100867746584) rotate(0 378.048358329399 -62.5602276919397)"><path d="M0.19 -0.16 C126.41 -21.08, 630.62 -104.6, 756.44 -125.39 M-1.17 -1.28 C125 -22.04, 629.23 -103.64, 755.67 -124" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(853.1173556357189 485.26100867746584) rotate(0 378.048358329399 -62.5602276919397)"><path d="M733.84 -111.81 C738.51 -114.04, 743.25 -119.02, 755.67 -124 M733.84 -111.81 C741.39 -115.64, 748.47 -119.65, 755.67 -124" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(853.1173556357189 485.26100867746584) rotate(0 378.048358329399 -62.5602276919397)"><path d="M731.11 -128.7 C736.42 -127.11, 741.79 -128.26, 755.67 -124 M731.11 -128.7 C739.38 -127.16, 747.34 -125.8, 755.67 -124" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1428.158692859468 573.8095205397834) rotate(0 99.04758998325906 -98.09522356305803)"><path d="M-0.69 0.35 C32.4 -32.3, 164.37 -162.29, 197.4 -195.01 M1.15 -0.51 C34.73 -33.55, 167.2 -164.18, 199.74 -196.51" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1428.158692859468 573.8095205397834) rotate(0 99.04758998325906 -98.09522356305803)"><path d="M189.05 -173.91 C191.64 -179.61, 195.19 -184.09, 199.74 -196.51 M189.05 -173.91 C193.46 -180.46, 195.66 -189.08, 199.74 -196.51" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1428.158692859468 573.8095205397834) rotate(0 99.04758998325906 -98.09522356305803)"><path d="M177.03 -186.07 C182.15 -189.23, 188.15 -191.23, 199.74 -196.51 M177.03 -186.07 C185.18 -188.74, 191.22 -193.47, 199.74 -196.51" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(178.95666248848454 32.92967723022559) rotate(0 95.72009354610003 33.750022888183594)"><path d="M16.88 0 C60.95 4.84, 102.39 2.16, 174.57 0 C188.68 -0.31, 194.21 8.11, 191.44 16.88 C190.68 24.97, 188 39.61, 191.44 50.63 C189.95 64.45, 189.29 69.54, 174.57 67.5 C134.52 64.98, 88.39 69.06, 16.88 67.5 C3.72 67.45, 2.31 60.64, 0 50.63 C2.01 42.61, -2.54 30.07, 0 16.88 C-2.95 5.89, 3.96 -1.44, 16.88 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M16.88 0 C62.79 2.2, 107.37 1.39, 174.57 0 M16.88 0 C50.72 1.09, 83.43 1.98, 174.57 0 M174.57 0 C187.7 0.3, 191.41 4.59, 191.44 16.88 M174.57 0 C185.22 -0.59, 193.73 6.32, 191.44 16.88 M191.44 16.88 C190.28 23.55, 190.66 33.72, 191.44 50.63 M191.44 16.88 C191.41 23.91, 190.92 31.59, 191.44 50.63 M191.44 50.63 C191.97 63.8, 186.36 69.04, 174.57 67.5 M191.44 50.63 C193.44 63.15, 185.82 69.22, 174.57 67.5 M174.57 67.5 C135.43 66.84, 97.46 67.02, 16.88 67.5 M174.57 67.5 C123.35 68.49, 71.8 68.18, 16.88 67.5 M16.88 67.5 C7.13 66.84, -1.56 61.31, 0 50.63 M16.88 67.5 C4 65.34, -0.54 63.06, 0 50.63 M0 50.63 C-0.42 37.92, -0.6 27.98, 0 16.88 M0 50.63 C0.06 43.11, -0.56 35.12, 0 16.88 M0 16.88 C-0.51 4.05, 4.56 0.89, 16.88 0 M0 16.88 C-1.12 3.33, 3.78 -1.41, 16.88 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(206.90276158878373 49.17970011840919) rotate(0 67.77399444580078 17.5)"><text x="67.77399444580078" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">原型定义.h</text></g><g stroke-linecap="round" transform="translate(189.50230733489366 47.86935417211953) rotate(0 95.72009354610009 33.750022888183594)"><path d="M16.88 0 C51.7 0.27, 91.98 -0.68, 174.57 0 C185.71 1.61, 194.77 4.17, 191.44 16.88 C192.08 30.27, 192.61 45.68, 191.44 50.63 C191.5 60.31, 188.76 67.55, 174.57 67.5 C127.9 70.18, 77.72 67.75, 16.88 67.5 C5.64 64.69, 1.73 61.91, 0 50.63 C0.02 36.69, -2.44 24.84, 0 16.88 C-0.1 2.83, 2.74 3.35, 16.88 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M16.88 0 C75.35 -0.99, 136.23 0.46, 174.57 0 M16.88 0 C53.34 -0.52, 87.86 -1.56, 174.57 0 M174.57 0 C186.41 -0.99, 189.61 4.6, 191.44 16.88 M174.57 0 C187.89 -0.66, 192.31 4.59, 191.44 16.88 M191.44 16.88 C190.62 25.11, 191.35 37.62, 191.44 50.63 M191.44 16.88 C190.79 29.45, 192.15 41.89, 191.44 50.63 M191.44 50.63 C190.9 60.91, 185.89 68.33, 174.57 67.5 M191.44 50.63 C192.6 63.88, 186 65.75, 174.57 67.5 M174.57 67.5 C138.27 68.46, 101.76 66.98, 16.88 67.5 M174.57 67.5 C127.16 64.95, 81.34 65.72, 16.88 67.5 M16.88 67.5 C4.66 68.7, 1.61 60.82, 0 50.63 M16.88 67.5 C4.27 68.21, -0.21 62.1, 0 50.63 M0 50.63 C-1.83 40.75, 0.83 25.83, 0 16.88 M0 50.63 C0.59 41.79, 0.45 35.04, 0 16.88 M0 16.88 C-0.99 5.37, 4.95 0.79, 16.88 0 M0 16.88 C1.73 7.71, 6.29 1.74, 16.88 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(217.44840643519296 64.11937706030312) rotate(0 67.77399444580078 17.5)"><text x="67.77399444580078" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">原型定义.h</text></g><g stroke-linecap="round" transform="translate(205.57853409692416 60.715947223604076) rotate(0 95.72009354610009 33.750022888183594)"><path d="M16.88 0 C55.64 0.55, 104.55 3.21, 174.57 0 C185.84 -1.72, 187.9 7.98, 191.44 16.88 C188.16 27.69, 189.21 36.12, 191.44 50.63 C191.26 59.58, 183.5 67.42, 174.57 67.5 C110.84 68.51, 51.58 63.24, 16.88 67.5 C5.74 68.8, 2.31 61.21, 0 50.63 C-1.14 40.24, -2.85 30.61, 0 16.88 C-0.48 2.22, 6.56 3.05, 16.88 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M16.88 0 C73.63 -1.27, 132.68 0.63, 174.57 0 M16.88 0 C75.14 -0.97, 131.71 -0.93, 174.57 0 M174.57 0 C186.17 1.19, 191.55 7, 191.44 16.88 M174.57 0 C183.71 -1.31, 190.6 4.03, 191.44 16.88 M191.44 16.88 C190.78 28.93, 191.67 38.19, 191.44 50.63 M191.44 16.88 C191.16 24.07, 190.66 31.7, 191.44 50.63 M191.44 50.63 C189.51 61.8, 184.73 68.67, 174.57 67.5 M191.44 50.63 C190.52 61.37, 187.81 65.7, 174.57 67.5 M174.57 67.5 C127.67 67.36, 79.22 66.46, 16.88 67.5 M174.57 67.5 C128.56 67.12, 81.71 67.05, 16.88 67.5 M16.88 67.5 C5.3 68.29, -1.94 61.43, 0 50.63 M16.88 67.5 C6.27 65.88, -0.69 59.86, 0 50.63 M0 50.63 C-1.46 41.34, 0.2 32.3, 0 16.88 M0 50.63 C0.08 40.02, 0.42 31.67, 0 16.88 M0 16.88 C0.69 4.64, 7.04 0.34, 16.88 0 M0 16.88 C-0.5 7.05, 5.83 1.94, 16.88 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(233.52463319722347 76.96597011178767) rotate(0 67.77399444580078 17.5)"><text x="67.77399444580078" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">原型定义.h</text></g><g stroke-linecap="round" transform="translate(182.3430245100409 224.67665696695985) rotate(0 95.72009354610003 33.750022888183594)"><path d="M16.88 0 C59.11 -0.88, 102.42 2.44, 174.57 0 C186.47 -0.1, 188 7.64, 191.44 16.88 C190.61 26.15, 191.01 33.67, 191.44 50.63 C191.56 65.32, 187.63 68.59, 174.57 67.5 C141.83 69.05, 108.09 72.01, 16.88 67.5 C8.62 66.36, -2.28 63.34, 0 50.63 C3.38 46.52, -2.19 34.36, 0 16.88 C-1.63 7.08, 3.65 1.96, 16.88 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M16.88 0 C56.39 -1.12, 91.07 -2.67, 174.57 0 M16.88 0 C53.53 -1.38, 88.17 -0.48, 174.57 0 M174.57 0 C185.52 1.72, 193.43 5.88, 191.44 16.88 M174.57 0 C184.14 -0.14, 193.09 3.38, 191.44 16.88 M191.44 16.88 C193.43 30.12, 190.68 39.11, 191.44 50.63 M191.44 16.88 C192.41 30.2, 192.75 42.46, 191.44 50.63 M191.44 50.63 C190.33 62.16, 185.83 66.62, 174.57 67.5 M191.44 50.63 C192.41 60.2, 184.22 68.96, 174.57 67.5 M174.57 67.5 C137.85 67.46, 98.74 68.66, 16.88 67.5 M174.57 67.5 C134.38 67.9, 92.65 68.8, 16.88 67.5 M16.88 67.5 C5.87 67.78, -0.39 60.13, 0 50.63 M16.88 67.5 C7.91 66.63, 1.36 63.96, 0 50.63 M0 50.63 C-1.51 36.85, 1.59 26.74, 0 16.88 M0 50.63 C0.26 41.59, 0.34 32.63, 0 16.88 M0 16.88 C-1.89 4.18, 7.19 -1.02, 16.88 0 M0 16.88 C-1.89 6.34, 3.61 0.65, 16.88 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(210.28912361034008 240.92667985514345) rotate(0 67.77399444580078 17.5)"><text x="67.77399444580078" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">原型定义.h</text></g><g stroke-linecap="round" transform="translate(192.88866935645012 239.61633390885368) rotate(0 95.72009354610003 33.750022888183594)"><path d="M16.88 0 C53.45 -0.67, 85.28 1.44, 174.57 0 C182.5 -2.67, 191.41 5.24, 191.44 16.88 C191.57 32.57, 193.26 42.45, 191.44 50.63 C188.62 62.94, 187.4 69.73, 174.57 67.5 C128.92 68.93, 75.01 71.54, 16.88 67.5 C2.56 65.59, 0.05 64.93, 0 50.63 C-1.21 39.01, -1.55 26.44, 0 16.88 C-2.81 2.86, 7.74 -0.34, 16.88 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M16.88 0 C64.18 -0.27, 115.29 2.74, 174.57 0 M16.88 0 C53.39 0.5, 91.19 -0.23, 174.57 0 M174.57 0 C184.36 -0.12, 192.87 3.67, 191.44 16.88 M174.57 0 C186.71 1.69, 190.43 7.63, 191.44 16.88 M191.44 16.88 C192.73 31.93, 192.42 44.55, 191.44 50.63 M191.44 16.88 C191.22 29.63, 191.79 41.67, 191.44 50.63 M191.44 50.63 C192.28 60.42, 184.42 68.77, 174.57 67.5 M191.44 50.63 C190 60.87, 187.24 68.33, 174.57 67.5 M174.57 67.5 C134.42 66.38, 97.59 68.2, 16.88 67.5 M174.57 67.5 C140.68 67.73, 106.35 66.72, 16.88 67.5 M16.88 67.5 C7.61 66.74, 1.19 63.69, 0 50.63 M16.88 67.5 C7.14 69.31, -0.96 60.45, 0 50.63 M0 50.63 C-1.05 41.83, -1.46 35.36, 0 16.88 M0 50.63 C-1 40.32, 0.73 30.95, 0 16.88 M0 16.88 C-1.64 6.25, 3.88 0.57, 16.88 0 M0 16.88 C-0.69 6.54, 4.23 -0.24, 16.88 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(220.83476845674932 255.86635679703727) rotate(0 67.77399444580078 17.5)"><text x="67.77399444580078" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">原型定义.h</text></g><g stroke-linecap="round" transform="translate(208.96489611848028 252.46292696033834) rotate(0 95.72009354610009 33.750022888183594)"><path d="M16.88 0 C60.44 -4.26, 110.61 -1.97, 174.57 0 C188.07 0.02, 194.21 5.75, 191.44 16.88 C188.93 31.3, 193.33 45.82, 191.44 50.63 C191.74 65.34, 189.08 70.49, 174.57 67.5 C129.18 66.74, 89.99 71.71, 16.88 67.5 C8.77 64.99, -1.77 60.24, 0 50.63 C-2.47 36.37, 2.45 27.3, 0 16.88 C-0.01 5.41, 4.88 1.71, 16.88 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M16.88 0 C52.2 -2.02, 90.67 -1.61, 174.57 0 M16.88 0 C76.98 -0.26, 139.26 -1.18, 174.57 0 M174.57 0 C186.59 1.47, 190.56 7.37, 191.44 16.88 M174.57 0 C187.9 -1.16, 190.72 7.3, 191.44 16.88 M191.44 16.88 C193.11 32.15, 192.47 42.33, 191.44 50.63 M191.44 16.88 C191.86 26.75, 190.75 38.71, 191.44 50.63 M191.44 50.63 C190.19 61, 187.05 68.22, 174.57 67.5 M191.44 50.63 C190.27 60.79, 186.03 66.5, 174.57 67.5 M174.57 67.5 C135.56 65.94, 100.04 68.18, 16.88 67.5 M174.57 67.5 C126.02 65.75, 76.08 67.03, 16.88 67.5 M16.88 67.5 C6.94 69.07, -0.84 60.63, 0 50.63 M16.88 67.5 C3.98 69.64, 0.92 61.02, 0 50.63 M0 50.63 C-0.13 42.65, -0.29 32.16, 0 16.88 M0 50.63 C-1.08 43.25, -1.14 35.54, 0 16.88 M0 16.88 C-0.6 6.42, 4.41 -0.2, 16.88 0 M0 16.88 C-1.66 5.84, 6.09 0.42, 16.88 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(230.73699161770537 268.71294984852193) rotate(0 73.947998046875 17.5)"><text x="73.947998046875" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">原型定义.cc</text></g><g stroke-linecap="round" transform="translate(678.1172924943698 432.6870669336088) rotate(0 73.74997329711914 40)"><path d="M20 0 C57.01 -4.28, 96.39 1.62, 127.5 0 C143.21 1.03, 150.54 8.46, 147.5 20 C149.33 33.47, 148.95 42.83, 147.5 60 C146.91 76.76, 138.02 81.45, 127.5 80 C91.55 81.29, 52.63 81.49, 20 80 C5.45 78.16, 0.37 75.64, 0 60 C3.87 49.31, 2.82 36.06, 0 20 C-0.9 5.37, 4.22 0.43, 20 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M20 0 C51.13 1.15, 79.45 0.82, 127.5 0 M20 0 C50.6 -0.65, 81.92 -1.15, 127.5 0 M127.5 0 C138.96 -1.29, 145.64 7.88, 147.5 20 M127.5 0 C139.39 1.63, 146.78 5.46, 147.5 20 M147.5 20 C149.15 28.4, 149.02 36.79, 147.5 60 M147.5 20 C146.7 31.16, 148.59 41.8, 147.5 60 M147.5 60 C145.83 74.09, 140.59 79.97, 127.5 80 M147.5 60 C146.34 74.62, 140.4 77.76, 127.5 80 M127.5 80 C102.73 81.64, 77.88 78.98, 20 80 M127.5 80 C86.19 81.47, 42.64 81.39, 20 80 M20 80 C6.61 81.34, 0.76 72.35, 0 60 M20 80 C6.08 80.86, -0.83 74.82, 0 60 M0 60 C1.57 51.14, 1.22 43.19, 0 20 M0 60 C-0.08 49.84, -0.05 41.41, 0 20 M0 20 C0.82 4.92, 7.15 1.6, 20 0 M0 20 C-2.1 8.91, 6.64 1.76, 20 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(692.1780986516583 449.38444521627025) rotate(0 73.74997329711914 40)"><path d="M20 0 C55.09 -1.67, 90.02 -2.33, 127.5 0 C141.18 0.67, 147.61 8, 147.5 20 C150.48 27.8, 146.89 40.54, 147.5 60 C148.1 69.93, 140.55 83.1, 127.5 80 C101.39 84.17, 79.03 80.17, 20 80 C8.48 80.22, -3.23 70.57, 0 60 C-0.25 51.37, 0.29 41.18, 0 20 C2.23 9.31, 5.04 2.38, 20 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M20 0 C42.25 -0.41, 65.06 -0.03, 127.5 0 M20 0 C41.75 -0.74, 64.96 -0.19, 127.5 0 M127.5 0 C140.35 1.09, 147.64 7.3, 147.5 20 M127.5 0 C139.1 -1.24, 147.58 6.24, 147.5 20 M147.5 20 C146.82 31.53, 148 38.77, 147.5 60 M147.5 20 C147.93 32.38, 148.01 44.22, 147.5 60 M147.5 60 C147.61 72.88, 142.11 81.56, 127.5 80 M147.5 60 C147.99 72.05, 139.05 77.94, 127.5 80 M127.5 80 C100.6 81.03, 71.95 81.89, 20 80 M127.5 80 C92.24 79.46, 58.23 80.05, 20 80 M20 80 C5.85 78.92, -1.1 71.59, 0 60 M20 80 C6.05 79.61, 0.67 72.66, 0 60 M0 60 C-1.9 48.51, -0.54 39.68, 0 20 M0 60 C-0.2 50.43, 0.25 39.61, 0 20 M0 20 C0.94 5.72, 6.57 -1.2, 20 0 M0 20 C-1.89 4.83, 4.59 -1.85, 20 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(703.4507994382861 464.86769488245113) rotate(0 73.74997329711914 40)"><path d="M20 0 C53.52 -0.18, 80.83 -3.43, 127.5 0 C141.15 -3.1, 147.24 7.06, 147.5 20 C147.56 27.46, 146.84 37.77, 147.5 60 C146.95 71.62, 140.25 79.39, 127.5 80 C87.61 77.43, 49.34 81.02, 20 80 C3.88 78.72, 1.74 73.54, 0 60 C-1.41 51.15, -1.75 38.77, 0 20 C-1.19 5.47, 8.04 0.8, 20 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M20 0 C49.52 1.7, 81.2 -0.8, 127.5 0 M20 0 C43.4 -0.23, 68.63 0.57, 127.5 0 M127.5 0 C142.7 0.66, 148.82 7.85, 147.5 20 M127.5 0 C141.87 1.14, 147.96 6.94, 147.5 20 M147.5 20 C147.13 27.87, 145.3 37.71, 147.5 60 M147.5 20 C147.95 32.03, 148.3 42.77, 147.5 60 M147.5 60 C146.96 71.95, 140.17 79.77, 127.5 80 M147.5 60 C148.98 73.92, 140.95 78.31, 127.5 80 M127.5 80 C88.32 78.68, 52.02 78.97, 20 80 M127.5 80 C88.69 80.68, 49.55 80.51, 20 80 M20 80 C5.78 81.83, 1.41 72.47, 0 60 M20 80 C8.84 78.08, 1.11 71.09, 0 60 M0 60 C1.12 47.05, 0.48 29.7, 0 20 M0 60 C-0.17 45.35, -0.24 31.59, 0 20 M0 20 C-0.94 7.5, 8.64 1.64, 20 0 M0 20 C-2.03 8.71, 7.25 0.23, 20 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(734.0807776182178 469.86769488245113) rotate(0 43.1199951171875 35)"><text x="43.1199951171875" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">es构图</text><text x="43.1199951171875" y="59.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">api.h</text></g><g stroke-linecap="round" transform="translate(687.4205788145077 631.0248916551379) rotate(0 73.74997329711914 40)"><path d="M20 0 C60.88 0.23, 101.52 1.1, 127.5 0 C138.7 0.37, 147.85 8.42, 147.5 20 C148.5 28.49, 146.54 40.73, 147.5 60 C149.82 72.93, 142.18 76.96, 127.5 80 C92.35 78.7, 47.36 78.85, 20 80 C9.26 76.71, 2.29 69.98, 0 60 C-0.74 45.87, -0.37 37.22, 0 20 C-1.65 8.88, 8.73 1.95, 20 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M20 0 C48.14 -0.2, 73.7 -0.41, 127.5 0 M20 0 C62.36 -0.27, 103.89 -0.72, 127.5 0 M127.5 0 C142.28 -0.45, 149.37 5.29, 147.5 20 M127.5 0 C142.41 -1.87, 149.49 8.46, 147.5 20 M147.5 20 C148.39 33.92, 145.22 45.33, 147.5 60 M147.5 20 C147.95 28.26, 147.43 36.51, 147.5 60 M147.5 60 C147.27 75.07, 139.73 78.73, 127.5 80 M147.5 60 C146.46 73.71, 142.34 80.64, 127.5 80 M127.5 80 C92 80.77, 57.94 79.59, 20 80 M127.5 80 C105.28 78.19, 83.91 79.89, 20 80 M20 80 C6.31 81.15, 1.04 75.04, 0 60 M20 80 C8.28 79.68, 0.25 72.3, 0 60 M0 60 C0.47 46.57, -0.44 29.25, 0 20 M0 60 C0.94 43.78, 0.18 28.22, 0 20 M0 20 C-0.55 6.23, 5.83 -0.2, 20 0 M0 20 C0.85 6.83, 8.52 1.16, 20 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(701.4813849717962 647.7222699377994) rotate(0 73.74997329711914 40)"><path d="M20 0 C59.58 1.62, 97.87 -0.5, 127.5 0 C141.18 1.76, 147.49 6.63, 147.5 20 C146.75 26.66, 150.02 39.39, 147.5 60 C148.85 70.29, 142.9 80.17, 127.5 80 C88.2 77.12, 58.16 75.66, 20 80 C8.96 76.65, 0.21 72.17, 0 60 C-0.41 47.76, -1.45 34.33, 0 20 C2.06 8.62, 6.58 0.78, 20 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M20 0 C60.54 0.03, 100.85 -0.23, 127.5 0 M20 0 C49.51 -0.4, 79.71 0.36, 127.5 0 M127.5 0 C142.7 -1.38, 148.88 5.04, 147.5 20 M127.5 0 C142.82 1.8, 148.35 4.61, 147.5 20 M147.5 20 C145.82 27.64, 146.02 36.74, 147.5 60 M147.5 20 C148.11 33.74, 147.71 49.5, 147.5 60 M147.5 60 C146.39 72.06, 139.93 80.33, 127.5 80 M147.5 60 C149.01 73.97, 141.59 80.65, 127.5 80 M127.5 80 C92.94 79.34, 52.42 81, 20 80 M127.5 80 C103.91 79.79, 80.53 79.59, 20 80 M20 80 C7.71 81.7, 1.4 73.05, 0 60 M20 80 C6.92 78.96, 1.48 71.89, 0 60 M0 60 C-0.73 48.23, 1.69 39.28, 0 20 M0 60 C-0.24 49.79, -0.62 41.06, 0 20 M0 20 C-0.83 6.46, 7.41 0.15, 20 0 M0 20 C1.85 7.83, 8.53 1.93, 20 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(715.8976214551135 667.9207664028913) rotate(0 73.74997329711914 40)"><path d="M20 0 C43.12 -1.21, 68.09 -0.31, 127.5 0 C144.25 -0.08, 148.12 3.33, 147.5 20 C147.27 31.05, 146.4 41.34, 147.5 60 C147.66 70.23, 140.27 76.65, 127.5 80 C96.27 81.82, 63.18 78.66, 20 80 C5.4 77.98, -0.93 74.91, 0 60 C0.46 49.93, 2.26 41.94, 0 20 C-1.01 8.52, 5.31 0.18, 20 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M20 0 C57.22 -1.42, 98.16 -2.48, 127.5 0 M20 0 C48.04 -1.26, 77.61 -0.97, 127.5 0 M127.5 0 C139.82 -1.52, 149.13 6.74, 147.5 20 M127.5 0 C142.98 0.76, 149.02 8.03, 147.5 20 M147.5 20 C147.94 31.91, 145.97 46.07, 147.5 60 M147.5 20 C148.08 31.9, 147.42 44.42, 147.5 60 M147.5 60 C148.41 73.74, 142.45 78.24, 127.5 80 M147.5 60 C146.87 71.74, 140.07 79.74, 127.5 80 M127.5 80 C86.86 81.01, 50.01 79.1, 20 80 M127.5 80 C104.61 80.28, 81.68 79.73, 20 80 M20 80 C7.61 81.14, 1.22 74.14, 0 60 M20 80 C5.65 82.11, 1.62 72.34, 0 60 M0 60 C-1.62 45.56, 0.71 28.02, 0 20 M0 60 C-0.82 46.14, -0.59 30.33, 0 20 M0 20 C-0.53 5.57, 5.98 -0.41, 20 0 M0 20 C-1.08 7.63, 8.94 1.89, 20 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(746.5275996350451 672.9207664028913) rotate(0 43.1199951171875 35)"><text x="43.1199951171875" y="24.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">es构图</text><text x="43.1199951171875" y="59.668" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">api.cc</text></g><g stroke-linecap="round"><g transform="translate(626.0163857116911 603.7501090424397) rotate(0 43.71099804507037 55.17896799127325)"><path d="M-0.37 -0.12 C14.04 17.93, 72.85 90.82, 87.6 109.32 M1.64 -1.24 C15.81 16.85, 72.39 91.98, 86.75 110.31" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(626.0163857116911 603.7501090424397) rotate(0 43.71099804507037 55.17896799127325)"><path d="M65.67 96.86 C73.93 102.56, 80.75 108.83, 86.75 110.31 M65.67 96.86 C72.41 101.61, 80.95 105.29, 86.75 110.31" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(626.0163857116911 603.7501090424397) rotate(0 43.71099804507037 55.17896799127325)"><path d="M79.25 86.46 C82.21 96.24, 83.66 106.63, 86.75 110.31 M79.25 86.46 C81.38 94.68, 85.29 101.91, 86.75 110.31" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(624.6794332075685 563.8424819892546) rotate(0 38.9472968887261 -29.965591460517427)"><path d="M0.31 0.02 C13.21 -9.86, 65.31 -49.49, 78.38 -59.51 M-0.99 -1.02 C11.71 -11.24, 64.46 -51.76, 77.69 -61.41" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(624.6794332075685 563.8424819892546) rotate(0 38.9472968887261 -29.965591460517427)"><path d="M64.06 -40.45 C69.32 -47.66, 75.19 -55.08, 77.69 -61.41 M64.06 -40.45 C68.19 -45.8, 70.91 -52.68, 77.69 -61.41" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(624.6794332075685 563.8424819892546) rotate(0 38.9472968887261 -29.965591460517427)"><path d="M53.78 -54.12 C62.93 -56.15, 72.71 -58.37, 77.69 -61.41 M53.78 -54.12 C60.95 -55.58, 66.6 -58.57, 77.69 -61.41" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g mask="url(#mask-giq2UuYQS1faL2vI33oeN)" stroke-linecap="round"><g transform="translate(192.16663142613015 578.4166603088378) rotate(0 115 2)"><path d="M0 0 C84.46 -1.77, 168.7 1.04, 230 4 M0 0 C79.84 0.63, 160.7 2.36, 230 4" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(192.16663142613015 578.4166603088378) rotate(0 115 2)"><path d="M206.32 12.02 C215.04 7.09, 223.52 5.72, 230 4 M206.32 12.02 C213.74 9.04, 222.45 6.62, 230 4" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(192.16663142613015 578.4166603088378) rotate(0 115 2)"><path d="M206.71 -5.08 C215.33 -3.73, 223.66 1.18, 230 4 M206.71 -5.08 C214.13 -2.07, 222.71 1.49, 230 4" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-giq2UuYQS1faL2vI33oeN"><rect x="0" y="0" fill="#fff" width="522.1666314261302" height="682.4166603088378"></rect><rect x="287.16663142613015" y="567.9166603088378" fill="#000" width="40" height="25" opacity="1"></rect></mask><g transform="translate(287.16663142613015 567.9166603088378) rotate(0 20 12.225125192032959)"><text x="20" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">读取</text></g></svg>
@@ -0,0 +1,10 @@
1+<?xml version="1.0" standalone="no"?>
2+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 495.8333740234375 336.1666259765625" width="495.8333740234375" height="336.1666259765625"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
4+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAQIABEAAAAADGwAAAOvAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhxEBmAANAgKCY4uERAKgVCBOAsIAAE2AiQDCgQgBYJeByAMFBshC8guC3hDafRPUqWoyTgsuEMVJmwf6EcNnr79fnd2FnFfPuKSTEL6kfioUDqeTRIhc6jeSOQ98u9tAnk3gCpAbyO/GCU3sDY57aGorroObOXuY/DmXu8eDAMrhMCwBgg48Yk4uEUQUISBHAhzqyk04P4FudXvp19mE5ZxkUQqwuVl/oVkhI1RgCwkoFBUYVojK2szdURCoqysEKb/ORVQu9bI3+PsjQgQDwAYRI7Kr48lXz4ZjUvJAXUsgB9AT/BCTqyQ+MuoBtQh6sMCRGcj+18nGFRfNAsUGAwg4Vh7A2epTxlRBRXHBX4yGTCb+HyIeOUqtcoDGobZMmW48/ElMBGKMkCxCMAACqRTBNWWYthFAa98KfupbwYiSOf+ygO45YiLwq3INOHihznc/RgR3S7x4kCHUKwYw2THi4McB9ZiLw52KI5pRVyW4EAQLaZTVbQ4DtWVVzFbEYcb31VNV30Q44mIGG8wGyRW9lY1IeFeHLKGxC7QVRSH6mdL6sP8I6VeHMolI6aVGUKmwIIYKzYYQ6wwRrHsJUNgLzFWmBAvDn3KcNwfEs3PC6ZM1/Icu0I6WwrzHqGHpZIDxiVKrWgZMS/kgpANVjmTZ7UilkuQ0TwJHLAVPcQBO2BihUmMF4dzydlCbIyiwiTNv25gWBnLCBAlgvcljizTFR4qNLGq0EWDDO6C/8VzswbBZCzYEsv7Dkd26R4PH4HYF2oIbESImQSpJPF+xpFzesGjRCUuhVoD2xBapkMv6bw/cOSRPvGYsYhnoa7guo0B1LrekE28nBJAiMi0lTCIcQALxgaT7Lyng165L8uBx0rc0YMrm9WHCnpcVt5Cq/L4ScpsiMu4LfFtPiugv3t/x13ZwOSDsfPbd4bqfW1d2R1dCojlyky9/742Ve/yNw6b5VdySLBStIuSmtif/5moVkY4Cgs5porqsXJsnz8z1vx4AEAAzXerCYo929a7/qtrKX0C3g5+OALw4eE07+VuyhKlNoDbxmfEPiEl+9+jlH07D+FEyRH9DeRSp+ar5RklapYa4BzFGiXEavRrvecmId2ryZDIjUkJOdy1/aYI9hmmI42fgxWici0alRNli5anWrsOohbNkBYhTZr0GFWtUrUmFXgKaeUUa9bod3uMj293iu5pVytP0dJFmlbIN/rdZu21dHF8tVb19og6T5FF8tnC5fQydmt1jTzaPi8s61q06rMV1arTuXt20pPFZgni5VPCCeXja3QD7fiIYYKvgDoA); }
5+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAQcABEAAAAADFwAAAPCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgWiBVgsGAAE2AiQDCAQgBYJeByAMFBsXC8iOwrblExUnh6q4iRkfJoJq7f2e3X0BUoQWWChESVg+MtbGnbDRQBa/MF+/n97LXjYrlJgU5KLUVE57RnrnOVg5z/2B+iL/iv//fvVx7n+TYtFi8+b8OyU6QpWxFSAJsku4VFyhS42rXIL7R/UqDVb+fUsE2gCBJIRAi0FumJW1ggpQKlAfgoGLc74fy0FGkhB3ibyCmFAuSSGHHC6AVZMNO4eWasjYe0QXsKPqo0B0C8svpcy2d89AqkkGMbqlm2zP6MSKxFBqFCiC6Ow9DQ3h9EPY0ISaTu9LVgCT2xS0B4fHGWYppszQXArGoXOglS/OQykwkwiZeKPINE9RkExSYMa5UArsJDKLrK+5rMYbI4JIbjtBZtTd0i5KfRNn65M6CA5HIpQf8kiEikNOzMCuzpYOjJNCKUi3INJVBCMz6llMepzkNQdCK5BN5iOR9SupKa0RBaOrmGHErhyHTOL5khrxvNGVwziUgvySzqQ6nXe6LiiS8nESUW4QLGdOUsGEVBLeHFxDiCvxxtaRlAEqykhTmL2c9TVRRihpbwnenCtKeHPiJOzKYWMoBdVk/oSEyQhlHA6qP9c+KEVKSgNaorG8jkHr8QYOVmDNWklsBBkUmBL+F7w3bYuwo+zBgdhb3pFBO+GdObiAK+vCVzdAuyM8KE9AxNPyHIP2wntz8AFf1oevfoD2RwRQgRBEAi0fzKBD8KEcwiCcDeNrBDCObADI7IGSXkx9SAYJlGz9DnAKmu7BZ+mNqTvjscn/Y/w+zaID71P3gNC5Wk2COtvXjyZVT59OX2T7PEXgGRvErgGnZ7Fgb9Vapu9Q+SR7+2fVT9WzIo/k3mAFi0uf89cFCvaCpc7WRl542ximNqgf3bt1eBh0dz7bbexXxo1qebDrVPY4tjRWJm8JlkQ6Tv9lTGmn0p8huWJgLB4uhA7odfN1utuPJbvUbGlO2l6Bttfu6GxZvJdNdqU64M/zsnkw8JbpbniTIeW/UsN+Arzv+uEDwFew78qh76HA0p9HA03SAs8fJVH+D0gHvx0WXDcay//4sHFKX/ljEtF56XEvanSMFUUFjHtZaEKnq5qkQ6XJppGdZVhTc88m2GA+DxzitRhpmBa8ctmqdBhjLN5IIyDRwkSKlMyoQ5sOw7XCIRIjhJWjRATlZObpw3GyjUHBlgxGlpHIDaIRQTlKXCOIkuPFCNWKN+4SYcQPlsSDZbDcZfzEfccsc3LFSKNMNuR16TZu54GLnosUqGFRjeU6qo8SoVEJmJDgAXagTsEEAAA=); }
6+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
7+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAUMABEAAAAADVAAAASzAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKg1yDIgsGAAE2AiQDCAQgBYJeByAMFBvjC6OiNgxOarJ/JthgjLpBrESMGWsuHOphITLnGJ36IfS+PdR8Gjtk3fuRNzNof3zz8K1mNaMJaBQbK6i7rCWA1tLZuxCiA2ZhiNwbEWMSoQpCtcKhrzDVndfuvas3Ke17SUHev1KXAhjJlByWOr/MryfvXDvMwsA5l69I7sAO/ulaSRUgFz5w+UWO/785jezPlWyFBDSu15f/UuNrDOCVcYBgUZhNySkA8sByVs/4xVi3sXYnBPPd+pWAAvwAAChAC4IAeFUxxc/MrezglgRACAA95zPxbphAMrQIUDfxzp8wFDSADpyIgwNw4DbF+WB+n/nrVzoE7v5PhPAGqmss33Xz4UAn0/8ByK7pJYzxmTiOBK5RUQesLLRlff0TmCkU+/oADkXuj/wEwkyxjCNtSHKeH8OM/+9jQNBMgQQ+z3NiwC4IZZUC5QucGKiLATuQEwN3QZEqW4kpkgWGpI4slhAoworCEqpihd2Njyol2AVSSakSUikJ0QkM7BmlGPs7McgaRGUcOYQirJpNqtyE/Q54L7QrFtLYOklKlmhnENAJAQOEoIxeJEn0QgAIYycGc0p3XGurNDovYFOYDhLFrcBSmZtUMSGlpAWCEwgRkkZsbsgCRxWhGWZyUdlKZmc6k5pbOi0QwK7IxW+KAcKCE4Pvik2VZAJACDsxhNe1j1PgKCKQCFF8Moem4KkCaEDnaSqGLJRiL/G3PDfNRLAoNnAIW3wuh+bh+QIEIOQFUhUBWoyQUFKQEan4cg6twCsFqEDNq6SqAbQWoaP0YCB68Y0c2oQ3C7CAlbdIFdAFtnrNILb2i1CGIgQMH6+WJFjMO/hOHTxN/J3qUpWWY0LBBziUapIqC6HmqOEYcS3RgjfgsngWidK2+9jugkW1E49B1bT9kt6tRtIjQIJVz7vSPvSTyq24qDGlkyaVhqVa/TipsNa7g4dZWmm4kdNJZRdrlgBePGzPGkPQKasXn5fHjAy7DeibD59Gd+/FjCvwLDtNamgpMfqW3IZ/WMNA+sRzkhqQGXddUS9As02+T9itJ+QzBE5c3bcGVWwNcbrVIporu2yyfS3H+jqZVfUvryC6BnntnWpQylOc2vgH323h+wM/Wv9PtAhSFrWtdwTU8TMy6Fum1vunf4txe/PHEWTiy/J0NGD4cHtdRCs+B+KPU46mzA4nM7wuL0K++3ZfyMyw7ZM8hQDV7XFky3uoo045+GdlRG0/DzabczSsHvlzWaQ7aXAooP0+xo+Pypx32fALNVyVa0w3/kJVBUX56PcRmLBq933ly3Me/N/elqmy25jIzAOEAl+5+ZhXAE77vlUABzxoqLfkkejZHyYJwC2a4ftvJdl/Per/n+tBcbyoF8xfJqyXjj6oYELF9KXPOY/LEUZI4gGoe86NQZFLYyTHJ2OsB1ma1G9M9kKUpRjfx8FTlCAJYgWJ4sKKuzDJUkRJEE+WB2du3AQQhAkRJk4w7JblyZFV3Ln6LhgRx3enspIMWVAKCRVZbivEXP2KO+8ag/HmPDkpEiX1FBFZvjZDzlJgJULayFWT57m5NkGiLOsoESKlLl096a5QHE92PDAcZySRrqZloK1TQg0UQUaaBgA=); }
8+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAWMABEAAAAADlAAAAUyAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAAPAgKCY4uERAKhVCEXQsIAAE2AiQDCgQgBYJeByAMFBuoDFFUUMaRfZFgU1H7HFwjc5lao1duh8RwWJAXvGzK8Mv3LXi+5vL9/ZtcWQHQ3hUYFIFQkZXRJWGrK1zkqerKTi2gI9vM/3uvN7WSNkNS+71CeRXDwkw7Z64xMHMm4XNnf+CwbbRVOZ2Op0S125sXDijCQI4wsFDrfzj/wv5/a7+Nc79KaAZeCsPZh5VKKTODioWiIf0USR5Nm1kkZWJna2PQ3aRg/SVDgBzQYRCu+O+TRblyMjMXTwINLEAMgIE9VO+zDVAw3gBIgEIRuKMxy4iPiguyZPBMK41iQOgN7T6vQRygAdtyVeDN++eA8cw/VPMuFwQdy6cIClqa4bcKZrG6Rj6a/y72RgAIt90jn/7ID3BHQt7YPiRyzUkSTwLvOomMHh26SECHYYoyQpTjpARyErAVd5HADosUtSEylbXiMKFaWCwUqiOx0rxC0TYg2XqrImHHDRP5WoaJ/MXFCQ51VhVxnNxFgmxhtguEHSwSK19sLpek5P+IZuri0DtoYzKbwoohgYoTBIfiOKYQ08msmCZQnONcJNglZdLRVYZcF1wNayXl/AYlaUySdk44r1Rb4XCRIKBCHWfFlARqnaiTmD1XGxSShMntvaEVjiIRC34BDsU5wkVCcHFprIJAcfxUJeLn5gxv5TkJslnKfEUjq3RNhw7DpNtNNsGRXvi3eG/eIticA9fsZL6nkX16oCNEZAqNGgM+IaRchtycZX6hkUt6paNGY6qN2gK+I/TcgNE8ZP6kkWf6omPFZlqNuoO0Rw8AtY82FJMYDBDBL0kw9t0ufUB4LPdQ7LCzStxVbUv9vB3z9Iy2zRS/nMmgTYTpkqCjQ4CilDsuBHiSodERbZuxOTCqZUZyzDMLfa/9PM5fqRYshiFyUEuwHYbg5wx5HILQndoFC5t5ZBGd35p8rr3RdAiYcKNaAs3QZJtg9oh+4m89dgw9zRygefOJ536parTtvG53CvZ0tc0QQK6Q1PMoxG607mXsqIBBtxHtNTw5Wn0cQp9P2eUJLUC9MPPMcdi07n3upAUye7Wyz/0Ghz80aNnSA+rMJVT5/x/8Mx8SVHcRjg7PMgIrINA2AOWa3lW+TFip2581gaarIR3CUXaHlisX1apqTg/cQOxPd25wWTm7WRX0roc0a7L6X8KyykrTZVYPSuDw4HHnPMlQNXqvoSYxHXBHARHW6n2omaaybKOh2urXVv68fV+6kqtN3WdLfWVTF32/6pgKSP1xiRLwfsCoNy56cnlFBbn+E/DAYlat3JPfZUxaq/Vv5tSvmuXX6DiMI/1VC0srrhCODi8M1kovzR2mJp1zxaKhSf4pk4yMSWSg75ixT/dIqGJORqcXlbnGju5GhqcbqjrX8a9kC+7Z/ykwzlA+jhx9618+aG6u6dz+Iz1XdkBHK7ZxzY3t7CF6B2Iyj9+EKybgcePV5pdlU/AAEth/W90/SDGJ9J+EZcER9a5BlAj8Ld9Wyx26aKwlR//5rqGt7wA8LHyzBsCTU9Mff+FA/k0dgAwMzv8zVtu/Ace/xhBchVKj7zDTYTVf7CqYxLosBhyXYJcyYjOBVo9FvJDvLt6QRxSvpJyvt8PxHmeMSnzzfbCtTJ4alfKUSROBVqRegzI1qmG6pXTqNGxGkQJFquTDgzA9nGpdOoK2YXPTVzaKUK9IHkZNG6Zzg4oO3Nalr1FSneysR9KpMo2XKMP49uS8ZAu2lWiauGX9MsnDNWq1JS9TolTj+tuLHlhtBSsKQxk3tzjuuiPQb4kUNsRa0AYAAA==); }
9+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAARoABEAAAAADKgAAAQQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgjSCFwsGAAE2AiQDCAQgBYJeByAMFBtYC6OiNg1KJWT/TMjkcqwPWnFwkBVqElk367YxmA19sO3bNtz5yCQf/M56mbQLMAvYd92D+GVqBm+u9x9YYH32eOA5298ltEXH/bzstNu2qGE4wMZpkQ8xPTnLlvtGEfKTPjl9wqB7HUtpwiPMOkFWLl4Q/v7SFvP2p2nAShfLz+ybjXhEeqPeqFSgCpIQRmP97Lp2PDqFE78ddDcpWH9/EhCADAAACIBDEAQgRYcOsg6NToYEAQA8D8DAZRpdJNOAAYcDkCpRNlgDiT4uEAMNXICVhG+KLsLS4J+bH8zjer4eaIVppYAsfXADuIT7D4ARAjgABaigCFQIMBCISC1t8OdZat2toR4gpOL9yAbAerMTsMf0TVAwJWMn9B/Zib31BYuec20M0ISxkIrgjVBpY4AnOwGNDGx2Apmw0I1INzQx3YhMmCiiWBSGskdB8Ua0ix2t97qKPrt6I46igin4zyN0zsyZu5Idb9AtiGBETnW/fi0mLwcJ/Ea8F9ZOao1Ml8fVUfu7mc67zIC6pweXRz3YzUB6g1/SkeTfz/S6QCTwmoTJDQIb5iA5iqgSd4BjIpm0ae20AFTinzKzB6lJz0j/sr3S75ChuIO4CzOw6w3VTjbHXjcDCOTo3QbycyUkxQBLGP45Bs3jBQ4iSKwok0X+FEvX/+W9aQWhUhroROPfYNAm3uJgg8PaQnUB7SF8KoCQBPxHDDrGJxxSyNhUqDmgC0RJVVCTiv+GQbf4jkMPA9sLdQTmqMOrQAQJcNBAeB4FEAKIs8kLamiCB4R3Tu1TpEwXkDQ1eRbdm6N1Iy11KdNduEU72Zki6VrpfOUyV95lNv6sYHybDfNuXHj1avIt1X58rE6kF87R55Ba2ywlVUo01T7O/8jTS5nb6MyVm7ApleSUY+MhswH93av+JIhZnNQXkj2OMafVPCcr+BZ4nSTrgm0+C0o79yCzvZoztFWPkqGfZ1KLRRqf14xyfYkFGjNfKR4jGiGuYupPXeXZqfUejlLLN0i8dk1WFA57XKTkRLnmbIE547eaFhBhUohxO3KRTKJGoOFC9ZknP3UQcm6ouWpcLHT/mt6WZhbGdT9a8uS9v0lI05cA3Fz53hgAnliZzOCf8pXgL20AIIFb4P7lxAW/Afn/t9sgXBfqgj5Rsi4XvkEfExJxlG73krhMFIklAVi6XegIFcd1HDk7dZQt0aJgWCfUTikgZr4PSFehQJ1qBSokCZKqRKMmFerUYpzYcuDAS7ASRUrUKIRtxpk1yzqyD7JeQqe3mwVpRIGCDOqyjMMGEfsg68i1EWDJfs5sFKrQfIkQ45t58kAizJZpmbi2cZmDq+rU6zCtUKZc8+L6ix5koqULk4ZybfH17JV2KscSfFCBTgIr); }
10+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="495.8333740234375" height="336.1666259765625" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(249.08328247070312 150.24990844726562) rotate(0 95.33334350585938 25)"><path d="M12.5 0 C53.32 -1.82, 98.4 0.52, 178.17 0 C185.87 -3.51, 190.94 5.42, 190.67 12.5 C188.98 18.33, 191.3 28.05, 190.67 37.5 C187.85 44.51, 188.02 47.53, 178.17 50 C121.9 46.6, 64.38 45.72, 12.5 50 C7.75 53.48, -1.86 42.93, 0 37.5 C-1.9 30.55, -2.62 26.08, 0 12.5 C3.32 2.38, 2.94 -1.1, 12.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M12.5 0 C70.97 -2.59, 132 -3.35, 178.17 0 M12.5 0 C76.92 -0.01, 139.98 -0.31, 178.17 0 M178.17 0 C185.95 -1.57, 192.56 2.83, 190.67 12.5 M178.17 0 C187.58 0.72, 192.38 6.14, 190.67 12.5 M190.67 12.5 C192.7 20.25, 189.41 23.97, 190.67 37.5 M190.67 12.5 C190.44 20, 190.58 26.31, 190.67 37.5 M190.67 37.5 C191.74 46.8, 185.76 49.98, 178.17 50 M190.67 37.5 C192.45 45.38, 188.51 52.03, 178.17 50 M178.17 50 C129.75 48.13, 84.63 47.6, 12.5 50 M178.17 50 C142.59 51.88, 107.38 50.13, 12.5 50 M12.5 50 C3.79 49.94, 1.23 46.56, 0 37.5 M12.5 50 C5.32 48.76, 0.19 45.18, 0 37.5 M0 37.5 C0.82 29.81, 1.6 21.28, 0 12.5 M0 37.5 C1.16 32.11, -0.37 26.06, 0 12.5 M0 12.5 C-1.61 4.42, 2.2 -0.98, 12.5 0 M0 12.5 C-1.59 2.73, 5.78 -0.32, 12.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(276.7749557495117 155.24990844726562) rotate(0 67.64167022705078 20)"><text x="67.64167022705078" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">基础数据结构</text><text x="67.64167022705078" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(Python Wrapper)</text></g><g stroke-linecap="round" transform="translate(33.833404541015625 213.74984741210938) rotate(0 86.58334350585938 35)"><path d="M17.5 0 C53.68 -0.35, 86.96 1.61, 155.67 0 M17.5 0 C65.46 -1.06, 114.93 -0.94, 155.67 0 M155.67 0 C168.27 0.63, 174.66 7.55, 173.17 17.5 M155.67 0 C166.02 1.32, 175.26 8.01, 173.17 17.5 M173.17 17.5 C172.48 29.27, 171.53 44.32, 173.17 52.5 M173.17 17.5 C173.74 30.41, 172.84 42.35, 173.17 52.5 M173.17 52.5 C174.72 63.77, 169.08 71.76, 155.67 70 M173.17 52.5 C172.84 65.9, 165.62 68.79, 155.67 70 M155.67 70 C116.9 68.96, 82.73 69.66, 17.5 70 M155.67 70 C102.26 68.73, 49.84 69.12, 17.5 70 M17.5 70 C6.83 68.92, 0.17 63.6, 0 52.5 M17.5 70 C5.55 71.8, -0.45 65.33, 0 52.5 M0 52.5 C-2.14 41.22, -1.71 35.15, 0 17.5 M0 52.5 C-0.6 42.71, -0.78 32.17, 0 17.5 M0 17.5 C-1.38 4.58, 7.24 -0.27, 17.5 0 M0 17.5 C-1.04 5.81, 6.91 -0.89, 17.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(54.925079345703125 218.74984741210938) rotate(0 65.49166870117188 30)"><text x="65.49166870117188" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">GE API(C++)</text><text x="65.49166870117188" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">在线:Session</text><text x="65.49166870117188" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">离线:aclgrphXxx</text></g><g stroke-linecap="round" transform="translate(36.666656494140625 144.41659545898438) rotate(0 81.58334350585938 25)"><path d="M12.5 0 C40.76 -2.96, 70.09 -2.3, 150.67 0 C157.13 0.89, 163.31 1.35, 163.17 12.5 C164.62 17.89, 161.9 24.9, 163.17 37.5 C160.98 43.07, 155.93 53.58, 150.67 50 C93.97 51.36, 41.41 46.52, 12.5 50 C3.4 47.8, 0.96 49.15, 0 37.5 C-1.62 32.02, -2.33 23.57, 0 12.5 C1.45 6.08, 1.05 -0.93, 12.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M12.5 0 C44.02 -2.23, 73.97 -0.82, 150.67 0 M12.5 0 C43.56 1.24, 74.43 1.78, 150.67 0 M150.67 0 C157.86 1.15, 164.98 6.06, 163.17 12.5 M150.67 0 C160.93 -1.61, 162.4 3.66, 163.17 12.5 M163.17 12.5 C164.1 18.15, 162.83 24.41, 163.17 37.5 M163.17 12.5 C163.85 21.01, 163.95 30.8, 163.17 37.5 M163.17 37.5 C162.89 47.34, 157.51 48.95, 150.67 50 M163.17 37.5 C162.44 47.22, 157.66 48.07, 150.67 50 M150.67 50 C112.51 51.98, 69.15 49.94, 12.5 50 M150.67 50 C110.11 49.96, 68.63 50.21, 12.5 50 M12.5 50 C3.92 51.56, -0.39 46.85, 0 37.5 M12.5 50 C3.59 52.07, -2.11 43.74, 0 37.5 M0 37.5 C-0.16 30.91, -1.82 25.02, 0 12.5 M0 37.5 C-0.44 29.05, 0.95 21.72, 0 12.5 M0 12.5 C-0.9 4.14, 5.1 -0.77, 12.5 0 M0 12.5 C-0.27 5.1, 5.39 -0.4, 12.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(50.60832977294922 149.41659545898438) rotate(0 67.64167022705078 20)"><text x="67.64167022705078" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">GE API</text><text x="67.64167022705078" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(Python Wrapper)</text></g><g stroke-linecap="round" transform="translate(10 10) rotate(0 237.91668701171875 158.08331298828125)"><path d="M32 0 C194.83 -0.24, 357.92 -1.68, 443.83 0 M32 0 C179.71 -2.51, 326.32 -2.25, 443.83 0 M443.83 0 C463.5 -1.39, 475.79 11.77, 475.83 32 M443.83 0 C465.44 -0.19, 477.07 11.78, 475.83 32 M475.83 32 C475.49 99.72, 477.25 164.38, 475.83 284.17 M475.83 32 C474.05 127.15, 473.83 220.65, 475.83 284.17 M475.83 284.17 C475.6 306.74, 465.63 317.87, 443.83 316.17 M475.83 284.17 C477.74 303.44, 464.73 316.1, 443.83 316.17 M443.83 316.17 C294.32 317.39, 145.68 317.16, 32 316.17 M443.83 316.17 C288 317.8, 131.94 316.81, 32 316.17 M32 316.17 C9.01 314.77, 1.9 305.17, 0 284.17 M32 316.17 C9.34 313.87, -1.86 305.8, 0 284.17 M0 284.17 C-0.01 234.49, 0.78 181.8, 0 32 M0 284.17 C-1.06 209.12, -0.53 133.27, 0 32 M0 32 C-1.95 10.82, 11.36 0.16, 32 0 M0 32 C-1.34 11.72, 9.75 -1.2, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(145.24993896484375 31.5833740234375) rotate(0 94.83333587646484 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">cann-graph-engine仓</text></g><g stroke-linecap="round" transform="translate(238.59716118706638 212.26378716362842) rotate(0 103.75003051757812 40.666717529296875)"><path d="M20.33 0 C83.95 2.77, 147.16 2.63, 187.17 0 M20.33 0 C57.87 -0.33, 97.05 0.92, 187.17 0 M187.17 0 C200.96 -0.17, 208.57 7.74, 207.5 20.33 M187.17 0 C199.87 -0.03, 209.29 6.32, 207.5 20.33 M207.5 20.33 C209.37 34.59, 206.81 51.2, 207.5 61 M207.5 20.33 C207.15 35.6, 207.49 50.48, 207.5 61 M207.5 61 C209.16 72.76, 200.35 81.28, 187.17 81.33 M207.5 61 C208.92 75.39, 201.87 80.1, 187.17 81.33 M187.17 81.33 C137.27 80.74, 85.25 80.63, 20.33 81.33 M187.17 81.33 C121.3 79.12, 58.04 79.65, 20.33 81.33 M20.33 81.33 C5.62 79.34, -1.61 74.81, 0 61 M20.33 81.33 C4.51 80.2, -1.59 73.12, 0 61 M0 61 C0.03 46.88, -0.72 30.65, 0 20.33 M0 61 C-1.19 47.22, 0.13 33.38, 0 20.33 M0 20.33 C-1.16 7.7, 5.98 -1.04, 20.33 0 M0 20.33 C0.57 6.87, 4.98 -0.85, 20.33 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(273.7721947564023 222.9305046929253) rotate(0 68.57499694824219 30)"><text x="68.57499694824219" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">基础数据结构(C++)</text><text x="68.57499694824219" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Grpah, Tensor,</text><text x="68.57499694824219" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Operator...</text></g></svg>
@@ -0,0 +1,9 @@
1+<?xml version="1.0" standalone="no"?>
2+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1355.6380615338496 704.2222222222223" width="1355.6380615338496" height="704.2222222222223"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
4+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAASYABEAAAAADQgAAARAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgxSCYAsGAAE2AiQDCAQgBYJeByAMFBuhC8iO0UvPO0mZYoRJipmLh//fr98+935RaTPv6+ouDbFQJyJWWVNJVDy0gZToHgrJ3lBeNrNZO8WkILNbanNetmkPYnowcs6JP+NFvir//+c0sje/ZCscsHH9PXklY2tMfhElwVgBCoXCbErtzEYPWBO5KT3pF+s2qldpsPJPU6ALKNpJGAcdpn4TuGevbARiTVCWAAOn53w/lgMBSULUEnsDpIR4WQohyOECRLXZdHa9pAUU1B/gJ8VG9tWAXAPLh/DhtnfPAEjNvF7MESAhYwgmEhvfHJoMMak/6OtjrbGrQ0s0G8I/sgEUpxyQXzmOQ7iU4mDfPA6Q0+fI5XuDYjmwQMhGkywcEsvhFRxYIWI5WIHsLBZqr3cEU4iZY449DLKjNqeH5YcmovVeXoaKR6yG6zRiNV4n2C0Kd7Z5KSorlsPfgvHXMDeQHbUvZu2CFHpGvJWgqEBsDqt11DnYmSTObpEUThDIxl6tdbBXSZygqFiO8JIi6U6jzdeFqCGskLJ4g0IDE6RDMUylHkzAdQyDM4uUdSQXgJoKWpzZK7FQGwdn1raPZgYTOLpIMBFMUDhBkbEcSVHR4LCRQqUCFqSfGx+ITWJOBjmTRV4hkZV0lQI1NLLaojUUcEI9/1vem9cR9JwBRmaIvEkim+kWBVbgslWvfoD3JwRwgUAsMPKERA6iBysIQagcotcwwIcTIrhIRLHIyEdL5Bh6rII4xMtxek0AwYlXBUDWJhkDyz6QQeJWmiRe4D2gKZVcvDcgObKDMTafh3CTrGkNmKlff/sM7PdY39y2NmaFP5N1RtK640oKw4Pev+9ca9waLc1hawMPb2qRnoHr8HBZ0LrRdZ2hW+zpDF3D/KajufFWZyrFSzUs3hw5d+FavRUfMWp6Ft04Xc003KfBTP3jxjtPykb9d8anzY/jPaLZJanOEPFa/5FNbVKhcd3GjNHRvD0d2HbVhqNK/eEtLMKueaPi84Rt1aGKW69U2l5DW8Hvc2ww1v8AjNo4trK+A8JWujFEsDJyWEhA5ydT5v3Eazkdm0wrJw0kBlsbnIc3mVf90W1uhczKF+8/ZW4aXXU02qYzrfxotmWQSYfLVBfOn9OlH4wlmqTD0m2uOv6wiCFbxHGfNcsfE+PKVvb/fX1Pnop0SzfVDVbl/BfLsE8AX17/CAGAr9XQleW3vsim7jwKAG0SCH5L9abfA9beb4cFN4UW5V/y2WJKX4VjFpV1mXZPa3UTJpokgIqXhScMue1JejQ82TJmZ9Owp9l92kKL+TrgOprTCEM50RoUa+Y12hi0EYZDksVJlCgbycvNaxgXnEdSxLB2koRAhSX79Pmxio2GBWeGEW0kcYNKQtBOktYooORkKWK50MZeooT4wbJ4oR62W42buO/oZYI7RhhpUiCtVZuxOw9cVBOp5FCiBcZNVNYkGDRARDVAAPSQNkEV); }
5+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAASwABEAAAAADSAAAARVAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgyyCcgsGAAE2AiQDCAQgBYJeByAMFBuzC8iOwrZtExWTJQbhyeKIePja7/Xc3Q0gqKSEDpCEfbKqU01gBKD8qhMhC+RZmOr383jaS+HB3TL8tJ7knDdnB/kPPMA552jWvl/Tk9n7IZsIBWxcfuZeyNgYA4QFQqFQmFbJuk41gSaQtbrG96zroLvBCbr7lQh0AgJJCIF2k5wRe/ZlFoJEgbqGjrNzvki0gJAkIarI0IDAkCxLIYIcNsCn1aYjF1JKIPbBB/qs/H51BXKlpYeAWPTgBkBq4v3HLCESMgbxRaQTmEVRxOiDiyYTq1bru2ZpMoh/ZANg1WGO4sSFzUE00VyYJnOQOLULFPL1a14cEKsQSmIS2eixmgPeKg6IJcqLA/4qlMxmbXJ+qZpGGOG0SjybjGrLKtmijcK1D6rCF30QCwUXGMRC4QWKjaVJa1sVTYd7cSBYgpU1mEbJqG4yqwuT9L8e7yVclYFYvi63NK+UvZVIsrGJNElRKIldyS1lVxJJiqa9OBAdMhz1jWaUx4W4LFoiOckC6QIWJj0a3y6U1BRchzGJ1bRxJEcAVcVWORi9MmuTuBiXWz88Tk2R6DJqSk3RJEUnenEgXZVRUJqUKEI0DNOyxw1MopJwciiY3PtmAtmcbiHBElaipcZasYMDd+P+Ftw3b0Ow5exgz+y87yCQlXRHCU4gRSe5OgPeheDKuQExN+9TAllFV0vQQCtq5KoDvJ5g4IxwZ0bvewhkT7qXBG/4iN5y9QWuftcFkLVKRhG1SQaJnS8Sj/EOCiW6/K5+b8ve+FvxcRk+GqibSZB7bnisI8bHz4VLFm0iC2cOlx9LX7KC7RdDB4yLm2Pc4thjScfk9Tdu6LUzQPlMpsOaq3X43O4tgyZnye2uFVmDHcqOwfzktcVXCzvaMdH5zI6YJfUzyrTlbTI4fCNl7vu+rXrtIR4SnW6KlasMr5KX3ZnxH3hqEa2sI0p6f+ssxBXb5zm0j8vSYcLawuK2syjt5o2p/EfcPGVb2Fv+TVIWkiJfZKMSXXWSL10q1P8cHdjAH1Kqti1Qtn3WfyRbO4SpD7vyFw9f2OfQ/sqaLVOlqvZZCzrWRDiLjB6OaV2lzwxxQhefgdLOUbgobH9jm8sIjOuskkfzMjYItV2CRy8Zn7pAR048bSnp9GYLtk9qf56e6Uvcnq9s30Ap+PZysuP2f+z58qRxbr/oRd0tIr9J5PyXAPxY9l4DwE8PbZvpqclY/ub+4JviE2L/p1L536H9//awYEfRjPwPEtlMSm9Aj1nkN8iYfVaLS/iiSIEltzNrGHTcmnRrWLM18M7SbW1yg3W6Wf8+cAGjTF+9lGEUSFCsygADMfrqAwngzY+fCImqVKjSWzmcQgJ5sq4/Xy8Es8nDpwZJMACmyxL07SJ+C+R9va6/4EoaRccL5KUcY9AhsogfLJyn82G3xuCB+w6YFubGvvoZ7syoUWvQzjUHPRXJVCpFCT47WF3xNdgAw7KEK2whq8AyAAAA); }
6+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAATAABEAAAAADTgAAARnAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKg0SDBwsGAAE2AiQDCAQgBYJeByAMFBvIC8iOwrblE1WUk0uMH+MyEw//jfW7b+abGVCJohLF2m9LSByaSUkeNYo200xl/z6ver/hEVs/AzLdI7WyHkGZhZF1lq67Tnu38n9zGpmfK9kKB2xcry+/ZGyNyRVRAtDGQqEwm5Jze1NAbnaO0OoZv2izQXeTgvX3KxGoAQSSEAJVeqigFfp8A0iUQJGDgatzfoHWEpIkxNlEd09USJZSlMnhAo8KL7RhT5YZ0grOo878Nu4syGdh7RFB3Pr4HCCVpv8YIERCRgu+gFqBASjho11o4zhWPP9maEypFu9H3gOYWc+CYovlLEIX9rKIm2aRvVdAIR9eFswCmsFYV08yaEUwC7wZFtAUEcwCfwbrGb63vtTiSWEa0zlVNNbjuvIqRuCNWeudqmkqFDNQtqceM2DYQzBplNLZVk1RCcEsCLYggjU0hfW4YTFpYCT+b8RDCWfyMMP3KbaUWJixFUomjaSUBIF1zO1iC3ObVBIUFcyC6JIsqQzXu14XxHnRFElJNoiXMUbKFE1Xcp4EXEfT3bQnZR3JIqDKtCILs5f53joWjW1pz6ExmFDi23gSngSlJCgymAXpTF6ZRUcKiTIYl32ub5AoJZQcFETufisObY23EWELdoKt2p5Po8DZ2N+C96YdEI6UEzgTJ/e7cGhXvJsId1AK7nJVAVqN0FBawETrfoJDe+A9RXiBt+AlVx9A+yL8KH8IIP7uD+TQQfhgESEQKoTINQw4hj8ggKxC0gEVORkkUIIKXAIegSaoV6yTl7gnDglsy2Vjm51NOw0bk/tAz83P0XjfuMsWeflFcHzjulW2+ZihckH9Au+U0W0Jx5Gyc8lTttVYx9iWu1m2M9U6I/LsiktI+czsvQlcn7eaDQbF6g5pMOe0Hoy3m02Ho/xz+cCi446S0C3yhSxuqLKJ/OOtFWBuM21GLspWfucnduzY+HmjaHK7lj/1JHTJMVf/XS5JDdJF68fLQpXE532b54E3ai09pw3wft0Ogk0HBBqeeIQMV8nuPdSpJ166BqT4q6JOPnPz32UrbIxE3euPdfjf0DSV8y/i/+v6cUPQhgMPR+J2ulysTWlChzNRHBTe2Xfnihntj1yS5NGulvi3PMwr09rKzpw6EB9/wk7avsoj/Y2DhDrlsvV1g3NY3A7X9WuWccKsCrTuydaxQtGAddWdu/XujXm7bKX77wII5B7/O6Wrfxy2Wf5NIs+/APhw4L0XAF8Dvddz3zh/wd/cDqBCWhD6VeVK/g1o/r89LLhBNJJ/QQwbpfQXfDGJ9FIZcq8qtw9flFRiyqvCHFo8NCd17pmzOfTOkmFzqUX28TLzcmCPeuVaNSlXr0wmk2odOtVr1QKLFCJcuESkapWqNauAAyxKECtFCAskmNRPH3TJ1AHj5Rm0lrDwDdJhQSlCTCOOk+NFCVahXtclkpgfLIHHS2GpVvfEfTuWMa5v1abfvl6tOl07j130VCyfRRYzPtdfsU2Y+j1+0xI04AiyAkwDAA==); }
7+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAWkABEAAAAADnAAAAVKAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAAPAgKCY4uERAKhXCEbgsIAAE2AiQDCgQgBYJeByAMFBu5DMieA27bBNueLWE0LxT0KqX0mb9n8Dz593nu3AU1/y0dwaXADu6kl6KG1aVLdgbrymQhJgdjbo/IVXIKa+psQb76ted/f+99X3KiK4xJfQ5diAplp891w7aBlT2m48kclv/f2m/j3C+OhaYeGsPZh5VKKTuLvv1iTSxZQjwkDQVSJKk2SviRlImdDaEwqldpsPJvAAJEgbxBuMl/nwiycAG7cxUNAEMQgHMAA5tV78k55CoGF0Tn4HafQ2SbjISg4oJZYTSo/+iSZuAfJt5ZLpzzfw5A54DzOgI6+vYPYIJNG5CHGDCAAkkIEdgmohghGcEsNq+xhLaf+fePAISbCyaJ/kgfUN6PAWFwywEou8a8QbfRB2e2HwGd1D6aAcsRKu5VxMPJ0QysnAFLcTQDL0ccL7RcXUsgQTSP9mlTxKGenbryIotU67e6UWJGPNfoXogHjcZ854IzP9QhJCOaQWzhFO2gYyQc6r3Y2VsR/jviKbK8HPEaqGmpbeEnhvl4LUz3YYyK+bPx0UEtnIkJseLUJVWSH9fLdl3QSaqURJgNuJ4pkitQWkkEYrjrcBufFhLrQiZQd+c0Y/ZWoS1mcM3g9rU10HLiRCAWVxEnJkXRDLa8fEKiuAj6MWHuc+cHjJuReAhOfuZFjSzRZR0KVIfi1USexFRr/hbvLesEQzJhOc2ZtzWyQ3d1ePAdnl0DIIeESIqROOOZTzVyRs91FCgdhV0rINeERmrROduZ7zXyQB91TJgdk10XMHktA4Da9xvSgM6hABFCOIIJl5MmIEJBjFdCSySR2VrR172QMdRytHSXZC6P3F7yZFTM9/ADisAyeZobtafsUu40+Zmb8fCR5dAs/voomkSOPv7NnhBmbveuRB6dbl+Pq2989BE5Xc6M4k1aY79dCVpz8fDRhG9etVbUsKfhdjOjvX6n6to2a7q2fTid3DjuUPJSbkbzJOU+CeNqVTRc5RyIGNloWzKuSdeZ0trQJ9HiWiFZ0QQRsrvAur0ptLqsVT2a27Qmahxvy8up65+K9zQvmuQ0RuOcKxGBDeVLpm5adYKnWFN9m0rK5qfmYSuU/sucitjW2GhbUnPPhm+xK77K192gmnqjak09N6x7bPEtXsmqtJT6zBMeecFuWRsvDunTUSCW2kyca37+Q8X0hU9Is5/9Hzxt9NZGqmXheZ774/ace48+kEV6TDNMFy8W9pYn0+7lFVRvFJH7wo8X+5Y6QFFmWq+VIo6W0ZrTvWnXRFfM9URpc+LFU+ZHX3Zu7sRJhjyXxX5coqIn16JjnpxPltn8Uh8mCV+XpDQE5Kp3pm78b25L4DOX7HC7DwV7tyMuZEDYx3GqqV0aCM1xvuS4QZl9uwSNFIpFTWOEkjHwtQfKMTdpy/ChKBq4Il6cdiJR9jS2+OomXhK6NkHa8gbHXp26ONrq1if7V7Ik4Y/q203dMrqz29fHfsic0WGHXuxbq5d1/iEN2+nkxeV204Ww5JRrAAABNCu8T+KRgzWy+2sYXr8BPDv5RwGAj2V2kfvk2qA/ugCAMMyCpT9kIujvgK/t1zkEdwkNRb8xlJ0ONT/xokwStS4DJoYyFjgSFJ4v5XnRIyRxuccQg9+jVEKPBg33BLMEGoeYxgFGM6DBjDENBqQIkaXDkhUGzJgiIZEY4oknkyI6tOgwoQlrEpKIYtkE4oJsJtz02iohlogbGWZZCfEbROOCbAIpDUbJ5ZKIpjMDVi8RlvCzOTnXwWyPtYmnLpcp3jFjztbAAT36rB7dedFbERXkiZEDjruQm4OFkg+aMokIBrgUKAMAAA==); }
8+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAATQABEAAAAADWAAAAR3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAAPAgKCY4uERAKg2CDDAsIAAE2AiQDCgQgBYJeByAMFBvXC8iO0UvfhKJMmRGEU8LEA99+3+7MvBVNjurjYy6hrCSiSxTR9BubiBwihyqaqfuOfy+bLEuneFkXqZndUkmdenuQ04OROj0QXyD9/5+6yNxuW+HmFLK/J6/L2BqT3/27NmMqglrbT2FASSwHoaHCMCVKIz2xjqe6QnUmln8HBdRzV6JgFeXvU6uffsISQ1YRmMigKGBgb0qfw3yQrnIoInSiowyhwWRPDJVScCGr2jet2ZFaCom782auEQ/83wlSJ8w/IMHu3L8DYkXsxSAViEhokgSwZ0ahcjGIi4vXKOPBh20jumHc5QpN/EeWAfLVAosNdFvALjFC+H9SAKp/L1hI+6tIAbAcIb2R4kMNKYAoFwAbQ5ACiHNk4JPaUEArGcQhLr2eG2RAzWw9n6mRt76ogdsZgHgo3GFEPBTtIPhEBnfONDBMNCmAZAtjdohjkAG1LDa2cCb+jngvaZ6JeLEmj86n+SMUzidSDE4QSM/35NF8D4UTDEMKILskT1bGGV2uC3lfNoa1TDYQhYKzZYY7V+kpCTjCcTinZKwHBQy4OXEowOz9Sa0XwsS89s2JSgLHeZSEkmBwgqFIAUzzzEJaT+EEwZACmH1ufiZmE8YcFkbzzFtKZCu6tQIb2BpsrHbyAgZSTfxb8N6sPcGBcYST0THzzhLZhe6qwA24wU2v7oT1IHgyXkBGr8wTEllBVypQQW1Q6VVDWC1Bx3jDx+ideV+J7EcnFfgjwOCv10CSHLQBJPv5qE0oCgkiVIoKgev4AMhgniBbjHvYWrHnS5YGfJl5q/cOdcg6bFJJjaaasM3csW7l+/ilr3Y+cCempjtgfXsiLLtgYtPNm7HFdeol4PLQbKvZBphIZkdZs/GaU/nVosWJOiXhzp1SrXoJ8Ptpl8V13Z+i197MLi/qXrO/hO2uT1TbDmb08u6pnKkDHHfcvFm0uMNi2DkJ19a1quw//pZWl6pf2baw19buon2Gdw8VIElqrfA+6LJwNfpASQ+KRG+srF42JqVa6KRFKtlGkq1QO5mWR6XnJ0dGcgFY5prWRa9V6HES6WFSg7NLmG2Wpa9qFB36Ea/f0ea92mXhhj2DVpQK2MhVrgtCWC7cuNb7wZz5i61yXnTW5So24DdG+Sx6o7w6CItqtZVOvfexCOuZ2/NLplvl7JdYPmO4/oKL9ypnZKiaXko8f/K2ilLJrVXWMOilPVn0+4PfmtTP+8XBsspq69ivJubpN3zZ9E4F+OarXvj/e+Gd/UmDAFSLC8o/rF72f8DW++aewC1juPTbLt7OFP8Z2TZJnmSKIKqELL6U1WCMr4U3aPLRGzUqe5OSc1ezYW+Fw+xEpfl97GDEGqAvllGhFCUaDDaE0QD9IZOVTDTRbEs0qNOgn1rQkClysTTJhECF5rLp2lApBoNgMwxYQiZu0J4QLE0yrSEGJY+bYpxDjIZeoonk3aKl2ARLTYZNvHXwMi6dAww0KtioSbOhV59d9MlB1qClKiXmFio6BVov040N4AkHmA1gLAA=); }
9+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="1355.6380615338496" height="704.2222222222223" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(235.05492918520326 175) rotate(0 98 43)"><path d="M21.5 0 C72.18 1.18, 127.32 1.18, 174.5 0 C186.58 2.41, 195.43 9.07, 196 21.5 C194.1 30.78, 199.95 42.14, 196 64.5 C198.88 78.83, 189.43 85.27, 174.5 86 C117.67 82.88, 61.07 84.16, 21.5 86 C8.3 84.81, 3.49 76.48, 0 64.5 C-2.38 46.52, 3.31 27.84, 0 21.5 C1.16 10.15, 7.7 1.24, 21.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M21.5 0 C75.25 -1.11, 127.21 -1.8, 174.5 0 M21.5 0 C70.3 -0.24, 121.59 -0.33, 174.5 0 M174.5 0 C186.98 1.02, 196.87 8.76, 196 21.5 M174.5 0 C188.49 -1.84, 194.88 9.46, 196 21.5 M196 21.5 C194.95 38.38, 195.42 55.49, 196 64.5 M196 21.5 C195.36 33.57, 196.29 45.8, 196 64.5 M196 64.5 C194.8 78.59, 187.26 85.46, 174.5 86 M196 64.5 C197.92 76.63, 187.32 86.43, 174.5 86 M174.5 86 C114.55 87.1, 54.71 89.18, 21.5 86 M174.5 86 C113.72 85.89, 54.23 85.79, 21.5 86 M21.5 86 C8.62 84.09, 1.49 79.61, 0 64.5 M21.5 86 C4.87 84.11, 0.12 78.39, 0 64.5 M0 64.5 C-0.19 50.5, -1.34 37.55, 0 21.5 M0 64.5 C0.24 52.76, -0.36 40.58, 0 21.5 M0 21.5 C-1.62 8.9, 7.56 -0.59, 21.5 0 M0 21.5 C0.15 6.28, 8.15 2.06, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(316.2549299481427 205.5) rotate(0 16.799999237060547 12.5)"><text x="16.799999237060547" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ops</text></g><g stroke-linecap="round" transform="translate(496.05492918520326 404) rotate(0 98 43)"><path d="M21.5 0 C70.36 -0.14, 127.04 2.43, 174.5 0 C188.81 -2.39, 197.29 9.84, 196 21.5 C193.95 28.21, 193.17 41.27, 196 64.5 C194.09 75.82, 192.05 86.54, 174.5 86 C129.41 91.71, 85.41 90.32, 21.5 86 C10.28 87.52, 3.23 77.96, 0 64.5 C-0.37 50.4, 2.36 36.37, 0 21.5 C0.76 6.06, 6.06 -0.3, 21.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M21.5 0 C70.29 -0.56, 116.7 0.2, 174.5 0 M21.5 0 C82.13 -1.34, 143.08 -0.76, 174.5 0 M174.5 0 C189.41 -0.28, 197.18 5.3, 196 21.5 M174.5 0 C187.9 -0.81, 197.6 8.04, 196 21.5 M196 21.5 C196.68 36.01, 195.7 49.22, 196 64.5 M196 21.5 C196.82 34.62, 195.18 47.07, 196 64.5 M196 64.5 C194.2 78.96, 190.16 85.21, 174.5 86 M196 64.5 C197.08 80.6, 189.74 85.11, 174.5 86 M174.5 86 C131.83 88.19, 85.98 86.16, 21.5 86 M174.5 86 C142.92 85.4, 113.15 86.11, 21.5 86 M21.5 86 C8.28 85.75, -1.6 79.27, 0 64.5 M21.5 86 C5.81 87.3, 1.03 78.52, 0 64.5 M0 64.5 C1.44 47.49, -0.31 31.4, 0 21.5 M0 64.5 C0.98 49.47, -0.75 31.82, 0 21.5 M0 21.5 C0.62 9.1, 7.79 1.5, 21.5 0 M0 21.5 C-0.07 6.21, 6.75 -0.21, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(554.3799299481427 434.5) rotate(0 39.67499923706055 12.5)"><text x="39.67499923706055" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">metadef</text></g><g mask="url(#mask-VY3m698dRfqwbnvw7cvIa)" stroke-linecap="round"><g transform="translate(373.182148079943 261.8207293546576) rotate(0 84.83763322703294 70.88656608964442)"><path d="M-0.53 1.01 C27.98 24.53, 142.08 117.15, 170.42 140.66 M1.4 0.5 C29.87 24.16, 141.98 117.77, 169.86 141.61" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(373.182148079943 261.8207293546576) rotate(0 84.83763322703294 70.88656608964442)"><path d="M146.39 133 C153.85 136.47, 156.11 137.1, 169.86 141.61 M146.39 133 C153.89 134.79, 162.1 139.09, 169.86 141.61" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(373.182148079943 261.8207293546576) rotate(0 84.83763322703294 70.88656608964442)"><path d="M157.41 119.93 C162.1 126.58, 161.63 130.44, 169.86 141.61 M157.41 119.93 C161.46 125.96, 166.12 134.49, 169.86 141.61" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-VY3m698dRfqwbnvw7cvIa"><rect x="0" y="0" fill="#fff" width="642.8574145340089" height="503.59386153394644"></rect><rect x="404.92811413168295" y="320.20729544430196" fill="#000" width="106.18333435058594" height="25" opacity="1"></rect></mask><g transform="translate(404.92811413168283 320.20729544430196) rotate(0 53.199755883589376 12.669718871954899)"><text x="53.09166717529297" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">register op</text></g><g stroke-linecap="round" transform="translate(691.0549291852033 173) rotate(0 98 43)"><path d="M21.5 0 C56.52 2.47, 88.52 0.62, 174.5 0 M21.5 0 C71.68 0.78, 120.51 0.63, 174.5 0 M174.5 0 C190.06 -1.12, 195.88 7.94, 196 21.5 M174.5 0 C189.66 1.33, 195.36 4.88, 196 21.5 M196 21.5 C195.8 33.06, 197.19 48.89, 196 64.5 M196 21.5 C195.65 32.64, 195.09 44.79, 196 64.5 M196 64.5 C194.91 79.27, 187.73 86.82, 174.5 86 M196 64.5 C194.7 77.97, 189.32 84.1, 174.5 86 M174.5 86 C120.19 85.11, 68.09 82.93, 21.5 86 M174.5 86 C142.05 87.93, 110.91 86.67, 21.5 86 M21.5 86 C8.28 87.89, 1.55 77.64, 0 64.5 M21.5 86 C6.78 84.02, -1.43 79.72, 0 64.5 M0 64.5 C1 51.12, 1.67 40.2, 0 21.5 M0 64.5 C-1.2 54.37, 0.34 43.92, 0 21.5 M0 21.5 C0.71 5.72, 6.27 -0.06, 21.5 0 M0 21.5 C0.78 7.65, 7.46 1.7, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(742.3882612469708 191) rotate(0 46.66666793823242 25)"><text x="46.66666793823242" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb code</text><text x="46.66666793823242" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">generator</text></g><g mask="url(#mask-0ML-Oec6WCOyEzYSidaJw)" stroke-linecap="round"><g transform="translate(666.5597607846908 403.59386153394655) rotate(0 59.90550338183482 -72.0938615339465)"><path d="M-0.11 -0.91 C19.95 -25.1, 100.62 -121.29, 120.48 -145.34 M-1.63 1.23 C18.32 -22.85, 99.35 -120.13, 119.88 -144.4" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(666.5597607846908 403.59386153394655) rotate(0 59.90550338183482 -72.0938615339465)"><path d="M111.34 -120.91 C112.51 -127.07, 114.75 -136.73, 119.88 -144.4 M111.34 -120.91 C112.58 -126.92, 115 -130.38, 119.88 -144.4" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(666.5597607846908 403.59386153394655) rotate(0 59.90550338183482 -72.0938615339465)"><path d="M98.24 -131.89 C103.45 -134.63, 109.76 -140.9, 119.88 -144.4 M98.24 -131.89 C102.22 -135.51, 107.48 -136.58, 119.88 -144.4" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-0ML-Oec6WCOyEzYSidaJw"><rect x="0" y="0" fill="#fff" width="886.3707675483604" height="647.7815846018395"></rect><rect x="670.3152626406466" y="319" fill="#000" width="112.30000305175781" height="25" opacity="1"></rect></mask><g transform="translate(670.3152626406466 319) rotate(0 55.66884886345838 12.539832293028041)"><text x="56.150001525878906" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">read all ops</text></g><g stroke-linecap="round" transform="translate(1065.0549291852033 10) rotate(0 109.5 200)"><path d="M32 0 C92.39 -3.62, 152.82 -4.91, 187 0 C208.17 3.35, 220.45 11.8, 219 32 C219.65 142.53, 217.35 256.07, 219 368 C218.05 389.59, 209.97 397.04, 187 400 C128.56 394.88, 76.24 400.98, 32 400 C7.09 399.7, 1.43 386.07, 0 368 C3.26 291.84, 0.06 217.41, 0 32 C1.22 9.34, 11.06 -0.75, 32 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M32 0 C81.34 -0.98, 128.77 -0.56, 187 0 M32 0 C86.74 -1.36, 140.43 0.22, 187 0 M187 0 C206.5 0.72, 220.82 11.86, 219 32 M187 0 C208.48 -0.66, 216.94 8.88, 219 32 M219 32 C217.64 135.07, 218.43 239.38, 219 368 M219 32 C218.52 133.51, 218 234.54, 219 368 M219 368 C219.47 389.16, 207.84 398.62, 187 400 M219 368 C220.79 387.39, 208.12 399.32, 187 400 M187 400 C139.42 396.84, 96.91 399.23, 32 400 M187 400 C131.7 400.06, 77.52 398.78, 32 400 M32 400 C10.06 400.91, -0.64 387.67, 0 368 M32 400 C11.42 399.67, -1.89 387.25, 0 368 M0 368 C-0.96 275.91, -2.77 184.86, 0 32 M0 368 C-1.3 237.52, -1.54 108.28, 0 32 M0 32 C-1.98 10.61, 10.23 0.53, 32 0 M0 32 C0.69 11.93, 12.9 0.7, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(1075.0549291852033 294) rotate(0 98 43)"><path d="M21.5 0 C52.19 4.75, 90.16 0.73, 174.5 0 C185.69 -0.6, 196.71 4.84, 196 21.5 C192.79 30.08, 194.66 45.37, 196 64.5 C193.86 75.31, 188.81 83.68, 174.5 86 C134.23 83.64, 84.72 89.2, 21.5 86 C5.8 88.68, 3.26 80.1, 0 64.5 C-2.05 51.89, -0.47 40.2, 0 21.5 C-2.21 7.54, 5.81 -0.36, 21.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M21.5 0 C80.23 0.6, 140.47 -0.82, 174.5 0 M21.5 0 C58.68 -1.7, 96.22 -1.33, 174.5 0 M174.5 0 C190.05 0.93, 194.82 7.71, 196 21.5 M174.5 0 C189.54 0.9, 194.24 7.49, 196 21.5 M196 21.5 C196.52 34.93, 195.22 43.68, 196 64.5 M196 21.5 C195.39 36.64, 195.59 49.65, 196 64.5 M196 64.5 C197.57 77.76, 188.88 87.24, 174.5 86 M196 64.5 C198.11 78.87, 187.67 87.44, 174.5 86 M174.5 86 C127.04 83.73, 77.73 85.76, 21.5 86 M174.5 86 C133.47 86.72, 90.69 87.61, 21.5 86 M21.5 86 C5.86 84.61, 0.69 77.52, 0 64.5 M21.5 86 C7.65 85.54, -0.04 80.94, 0 64.5 M0 64.5 C-1.1 49.85, 0.79 30.52, 0 21.5 M0 64.5 C0.21 47.46, 0.27 30.89, 0 21.5 M0 21.5 C-0.78 7.55, 8.74 0.35, 21.5 0 M0 21.5 C1.54 6.16, 5.36 0.99, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1143.5715955975568 324.5) rotate(0 29.483333587646484 12.5)"><text x="29.483333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">C API</text></g><g stroke-linecap="round" transform="translate(1076.0549291852033 186) rotate(0 98 43)"><path d="M21.5 0 C72.49 -2.87, 117.88 1.99, 174.5 0 C187.16 -2.18, 196.85 9, 196 21.5 C199.94 29.72, 198.51 36.79, 196 64.5 C198.81 76.82, 189.56 88.76, 174.5 86 C125.99 87.3, 84.31 89.3, 21.5 86 C5.67 84.64, 3.52 75.5, 0 64.5 C2.85 48.39, 2.66 36.65, 0 21.5 C0.07 7.7, 9.93 0.1, 21.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M21.5 0 C78.92 -1.09, 136.9 -2.01, 174.5 0 M21.5 0 C58.53 -0.55, 94.22 -0.37, 174.5 0 M174.5 0 C189.7 -0.02, 195.73 8.96, 196 21.5 M174.5 0 C189.58 2.06, 196.17 6.39, 196 21.5 M196 21.5 C197.38 40.12, 197.94 54.79, 196 64.5 M196 21.5 C195.71 31.84, 196.31 43.85, 196 64.5 M196 64.5 C195.2 77.54, 188.57 84.72, 174.5 86 M196 64.5 C194.65 80.67, 189.14 86.39, 174.5 86 M174.5 86 C124.54 85.16, 72.32 86.43, 21.5 86 M174.5 86 C133.03 85.33, 93.12 84.64, 21.5 86 M21.5 86 C5.55 86.76, -1.47 78.88, 0 64.5 M21.5 86 C5.12 86.03, -0.24 77.84, 0 64.5 M0 64.5 C1.54 46, -0.17 30.79, 0 21.5 M0 64.5 C-0.89 48.63, -0.68 31.61, 0 21.5 M0 21.5 C-1.57 8.49, 6.38 1.1, 21.5 0 M0 21.5 C-2.17 7.69, 8.51 1.26, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1133.5715955975568 216.5) rotate(0 40.483333587646484 12.5)"><text x="40.483333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">C++ API</text></g><g stroke-linecap="round" transform="translate(1072.0549291852033 79) rotate(0 98 43)"><path d="M21.5 0 C75.25 3.45, 130.69 3.6, 174.5 0 C191.84 -3.49, 198.24 8.34, 196 21.5 C193.82 36.34, 196.82 51, 196 64.5 C199.04 78.98, 188.29 83.58, 174.5 86 C126.05 88.86, 73.21 83.61, 21.5 86 C4.46 85.57, -2.27 80.5, 0 64.5 C1.75 56.79, 1.19 44.27, 0 21.5 C0.27 6.71, 7.15 -3.55, 21.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M21.5 0 C77.05 0.7, 133.84 -1.62, 174.5 0 M21.5 0 C65.39 2.32, 110.1 1.33, 174.5 0 M174.5 0 C188.28 -1.86, 195.8 9.05, 196 21.5 M174.5 0 C188.34 0.77, 194.6 5.84, 196 21.5 M196 21.5 C195.33 33.38, 196.74 46.24, 196 64.5 M196 21.5 C197.06 32.94, 196.98 44.26, 196 64.5 M196 64.5 C197.34 79.23, 187.37 86.63, 174.5 86 M196 64.5 C198.17 76.63, 187.92 88.16, 174.5 86 M174.5 86 C131.65 84, 85.65 85.57, 21.5 86 M174.5 86 C128.21 84.57, 82.93 86.08, 21.5 86 M21.5 86 C6.68 87.37, -1.85 78.68, 0 64.5 M21.5 86 C5.1 86.06, -1.1 80.06, 0 64.5 M0 64.5 C0.12 53.63, 0.11 41.91, 0 21.5 M0 64.5 C1 50.08, 0.06 35.91, 0 21.5 M0 21.5 C1.49 7.95, 6.6 0.27, 21.5 0 M0 21.5 C-1.74 6.48, 6.49 -1.85, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1112.1215948346173 109.5) rotate(0 57.93333435058594 12.5)"><text x="57.93333435058594" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Python API</text></g><g transform="translate(1150.0549291852033 31) rotate(0 16.350000381469727 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb</text></g><g mask="url(#mask-h58ycAelbHyG68J7YDTDA)" stroke-linecap="round"><g transform="translate(889.7851021248284 211.99831358087272) rotate(0 83.87654653138577 0.5242284158211703)"><path d="M0.93 0.79 C29.01 0.78, 140.18 0.51, 167.88 0.58 M-0.04 0.16 C27.95 0.25, 139.31 1.46, 167 1.87" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(889.7851021248284 211.99831358087272) rotate(0 83.87654653138577 0.5242284158211703)"><path d="M143.41 10.13 C150.56 8.11, 154.33 4.86, 167 1.87 M143.41 10.13 C150.7 7.96, 158.44 4.37, 167 1.87" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(889.7851021248284 211.99831358087272) rotate(0 83.87654653138577 0.5242284158211703)"><path d="M143.62 -6.97 C150.81 -4.73, 154.53 -3.72, 167 1.87 M143.62 -6.97 C150.85 -3.77, 158.52 -2, 167 1.87" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-h58ycAelbHyG68J7YDTDA"><rect x="0" y="0" fill="#fff" width="1157.5381951876" height="313.04677041251506"></rect><rect x="930.7116478932746" y="200.02254199669392" fill="#000" width="85.9000015258789" height="25" opacity="1"></rect></mask><g transform="translate(930.7116478932749 200.02254199669392) rotate(0 42.99340691650298 12.994296077825112)"><text x="42.95000076293945" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">auto gen</text></g><g transform="translate(32.054929185203264 480) rotate(0 21.774999618530273 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">build</text></g><g transform="translate(33.16881845556202 543.7222222222222) rotate(0 32.19166564941406 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">publish</text></g><g stroke-linecap="round" transform="translate(424.9438180740924 607.2222222222223) rotate(0 98 43)"><path d="M21.5 0 C68.92 -0.57, 120.42 -1.99, 174.5 0 C188.73 -2.5, 193.87 6.92, 196 21.5 C194.05 33.89, 195.3 37.9, 196 64.5 C199.54 75.37, 189.6 84.57, 174.5 86 C129.99 85.53, 78.11 85.02, 21.5 86 C5.81 84.69, -1.75 82.11, 0 64.5 C3.28 52.57, -3.76 40.33, 0 21.5 C0.9 10.33, 9.21 0.48, 21.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M21.5 0 C59.87 0.69, 100.78 1.11, 174.5 0 M21.5 0 C59.19 -1.92, 97.79 -1.93, 174.5 0 M174.5 0 C187.64 1.53, 196.53 6.05, 196 21.5 M174.5 0 C189.09 -0.1, 196.95 7.17, 196 21.5 M196 21.5 C197.97 29.92, 195.25 39.2, 196 64.5 M196 21.5 C195.54 29.3, 195.15 39.08, 196 64.5 M196 64.5 C194.57 80.66, 189.35 85.93, 174.5 86 M196 64.5 C194.84 78.14, 187.75 86.01, 174.5 86 M174.5 86 C139.22 86.34, 105.54 84.48, 21.5 86 M174.5 86 C134.76 87.16, 94.27 86.88, 21.5 86 M21.5 86 C7.97 84.96, 0.02 80.4, 0 64.5 M21.5 86 C8.24 87.65, -1.63 78.74, 0 64.5 M0 64.5 C-1.82 56.63, -0.44 46.51, 0 21.5 M0 64.5 C-0.6 47.43, -0.98 32.4, 0 21.5 M0 21.5 C-1.31 6.95, 8.01 -1.7, 21.5 0 M0 21.5 C0.51 6.29, 7.49 0.86, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(492.9438180740924 637.7222222222223) rotate(0 30 12.5)"><text x="30" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">算子包</text></g><g stroke-linecap="round"><g transform="translate(341.52914603709814 261.40613846605356) rotate(0 76.6808971322559 172.28631932747658)"><path d="M0.7 0.3 C26.3 57.54, 129.01 286.92, 154.41 344.38" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(341.52914603709814 261.40613846605356) rotate(0 76.6808971322559 172.28631932747658)"><path d="M137.04 326.4 C144.06 334.64, 149.61 339.05, 154.41 344.38" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g><g transform="translate(341.52914603709814 261.40613846605356) rotate(0 76.6808971322559 172.28631932747658)"><path d="M152.66 319.44 C154 330.33, 153.82 337.3, 154.41 344.38" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(10.943818074092292 525.2222222222223) rotate(0 666.5 0)"><path d="M-0.94 0.16 C220.97 -0.19, 1110.17 -0.96, 1332.33 -0.93 M0.76 -0.81 C222.99 -0.53, 1112.41 0.29, 1334.69 0.13" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1173.0398776225006 417.7279226631247) rotate(0 -324.2662995676253 92.68495008636268)"><path d="M-1.04 0.15 C-109.15 30.85, -541.1 153.6, -648.92 184.37" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(1173.0398776225006 417.7279226631247) rotate(0 -324.2662995676253 92.68495008636268)"><path d="M-628.67 169.71 C-634.06 172.98, -641.63 178.64, -648.92 184.37" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g><g transform="translate(1173.0398776225006 417.7279226631247) rotate(0 -324.2662995676253 92.68495008636268)"><path d="M-623.98 186.16 C-630.71 184.8, -639.59 185.86, -648.92 184.37" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(661.9438180740925 608.2222222222223) rotate(0 97.99999999999994 43)"><path d="M21.5 0 C55.56 -3.16, 95.07 -2.88, 174.5 0 C189.16 3.47, 193.32 8.07, 196 21.5 C194.85 36.46, 197.98 49.91, 196 64.5 C197.23 81.73, 186.63 88.55, 174.5 86 C131.83 84.12, 88.2 86.9, 21.5 86 C7.97 89.39, 3.01 78.25, 0 64.5 C2.61 52.15, 0.33 36.31, 0 21.5 C2.27 8.55, 9.2 -0.15, 21.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M21.5 0 C80.15 -2.65, 134.32 -0.18, 174.5 0 M21.5 0 C64.16 -2.04, 106.13 -1.55, 174.5 0 M174.5 0 C187.25 -0.67, 195.2 6.9, 196 21.5 M174.5 0 C188.03 -1.74, 197.98 6.29, 196 21.5 M196 21.5 C195.1 32.93, 196.29 46.33, 196 64.5 M196 21.5 C196.19 30.11, 196.44 39.91, 196 64.5 M196 64.5 C195.71 77.31, 188.12 86.19, 174.5 86 M196 64.5 C195.99 79.46, 190.3 87.94, 174.5 86 M174.5 86 C137.88 85.22, 102.7 87.18, 21.5 86 M174.5 86 C136.44 85.16, 98.36 85.55, 21.5 86 M21.5 86 C8.52 87.45, -1.74 80.09, 0 64.5 M21.5 86 C6.01 84.55, -1.52 76.98, 0 64.5 M0 64.5 C0.38 51.79, -1.19 37.99, 0 21.5 M0 64.5 C0.13 55.87, -0.35 46.16, 0 21.5 M0 21.5 C-1.29 8.68, 5.87 -1.81, 21.5 0 M0 21.5 C-0.91 5.2, 7.33 -1.81, 21.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(704.335484486446 638.7222222222223) rotate(0 55.60833358764643 12.5)"><text x="55.608333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">编译/运行包</text></g><g stroke-linecap="round"><g transform="translate(631.9438180740923 497.2222222222223) rotate(0 43 52.5)"><path d="M-0.06 0.24 C14.17 17.68, 70.87 87.09, 85.3 104.51" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(631.9438180740923 497.2222222222223) rotate(0 43 52.5)"><path d="M63.78 91.79 C70.53 94.4, 75.69 100.14, 85.3 104.51" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g><g transform="translate(631.9438180740923 497.2222222222223) rotate(0 43 52.5)"><path d="M76.99 80.93 C79.82 86.75, 81.07 95.71, 85.3 104.51" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g></g><mask></mask></svg>
@@ -0,0 +1,2 @@
1+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 732 739.4999999999999" width="732" height="739.4999999999999"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
2+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="732" height="739.4999999999999" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 10) rotate(0 356 46)"><path d="M23 0 C264.13 -2.38, 506.62 -2.14, 689 0 M23 0 C215.22 1.12, 406.51 1.09, 689 0 M689 0 C705.59 0.85, 710.23 6.53, 712 23 M689 0 C706.26 -0.16, 713.69 5.56, 712 23 M712 23 C711.54 38.18, 713.58 56.21, 712 69 M712 23 C712.04 39.53, 713.16 54.79, 712 69 M712 69 C712.23 82.97, 702.55 92.42, 689 92 M712 69 C710.56 85.17, 704.91 91.24, 689 92 M689 92 C530.33 92.46, 370.81 93.31, 23 92 M689 92 C505.45 90.9, 321.02 90.37, 23 92 M23 92 C9.65 93.39, -1.95 85.06, 0 69 M23 92 C7.37 90.28, -2.05 83.5, 0 69 M0 69 C0.74 59.54, 2.12 50.64, 0 23 M0 69 C-0.41 50.71, 0.21 32.77, 0 23 M0 23 C0.21 8.57, 9.01 0.09, 23 0 M0 23 C0.88 8.24, 7.41 0.83, 23 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(345.2749996185303 43.5) rotate(0 20.725000381469727 12.5)"><text x="20.725000381469727" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">APP</text></g><g stroke-linecap="round" transform="translate(10 124.5) rotate(0 356 302.49999999999994)"><path d="M32 0 C199.04 1.42, 367.39 1.32, 680 0 M32 0 C252.18 2.49, 473.31 2.12, 680 0 M680 0 C702.73 -0.96, 710.74 11.09, 712 32 M680 0 C699.97 -2.1, 712.16 12.3, 712 32 M712 32 C713.34 198.05, 712.58 363.07, 712 573 M712 32 C713.29 184.81, 713.16 337.47, 712 573 M712 573 C711.61 595.69, 700.91 605.7, 680 605 M712 573 C713.85 595.19, 700.9 604.44, 680 605 M680 605 C539.64 603.81, 398.34 604.04, 32 605 M680 605 C505 604.39, 328.94 604.91, 32 605 M32 605 C10.16 604.1, -1.64 593.39, 0 573 M32 605 C8.78 605.48, -2.2 596.42, 0 573 M0 573 C-0.42 386.93, 0.41 198.89, 0 32 M0 573 C2.11 402.8, 1.8 232.89, 0 32 M0 32 C0.77 9.66, 12.47 -0.75, 32 0 M0 32 C-0.94 11.33, 10.1 -0.14, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(357 156) rotate(0 14.866666793823242 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">GE</text></g><g stroke-linecap="round" transform="translate(65 477) rotate(0 149 43.5)"><path d="M21.75 0 C115.26 0, 209.84 0.91, 276.25 0 M21.75 0 C110.01 0.63, 196.89 0.2, 276.25 0 M276.25 0 C289.83 0.51, 296.73 6.04, 298 21.75 M276.25 0 C291.48 -1.43, 297.65 4.99, 298 21.75 M298 21.75 C296.86 39.64, 296.99 57.37, 298 65.25 M298 21.75 C297.4 35.11, 297.23 47.11, 298 65.25 M298 65.25 C298.11 77.96, 289.46 86.57, 276.25 87 M298 65.25 C298.81 78.34, 289.74 86.55, 276.25 87 M276.25 87 C225.02 83.86, 171.98 86.22, 21.75 87 M276.25 87 C208.87 88.4, 142.02 88.9, 21.75 87 M21.75 87 C5.89 87.82, -0.59 78.6, 0 65.25 M21.75 87 C5.72 88.17, 1.02 80.87, 0 65.25 M0 65.25 C-0.49 55.13, 0.91 43.1, 0 21.75 M0 65.25 C0.65 54.85, -0.94 46.19, 0 21.75 M0 21.75 C-1.64 6.96, 7.49 0.31, 21.75 0 M0 21.75 C-2.16 7.29, 6.33 0.07, 21.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(170.67499923706055 508) rotate(0 43.32500076293945 12.5)"><text x="43.32500076293945" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Operator</text></g><g stroke-linecap="round" transform="translate(67 232) rotate(0 306 114.5)"><path d="M32 0 C167.02 4.25, 299.2 3, 580 0 C600.43 1.08, 610.76 12.92, 612 32 C610.54 94.19, 610.16 155.64, 612 197 C614.23 216.28, 602.48 230.87, 580 229 C361.55 229.57, 142.44 228.79, 32 229 C8.9 225.91, 0.89 221.42, 0 197 C-0.68 154.42, 0.9 106.99, 0 32 C0.76 8.68, 9.07 -1.29, 32 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M32 0 C215.14 -0.35, 396.34 -0.72, 580 0 M32 0 C157.13 1.24, 281.83 0.78, 580 0 M580 0 C600.88 0.86, 612.49 9.71, 612 32 M580 0 C599.83 -1.4, 612.79 12.71, 612 32 M612 32 C615.39 80.68, 615.08 127.17, 612 197 M612 32 C611.96 65.08, 611.67 99.53, 612 197 M612 197 C612.34 217.37, 600.75 230.66, 580 229 M612 197 C612.31 219.7, 600.7 228.53, 580 229 M580 229 C410.88 227.61, 241.95 227.15, 32 229 M580 229 C400.86 227.4, 220.95 227.38, 32 229 M32 229 C9.54 227.82, 1.59 217.7, 0 197 M32 229 C9.74 230.93, -0.53 217.98, 0 197 M0 197 C1.18 156.81, -0.03 114.41, 0 32 M0 197 C0.33 131.55, 0.68 67.76, 0 32 M0 32 C0.43 10.72, 11.58 1.44, 32 0 M0 32 C-1.84 12.4, 9.95 -0.15, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(70.5 599) rotate(0 60 42)"><path d="M21 0 C41.24 0.21, 62.08 1.5, 99 0 M21 0 C49.04 1.19, 79.33 1.43, 99 0 M99 0 C112.19 -1.45, 120.39 7.21, 120 21 M99 0 C114.33 2.18, 117.94 8.07, 120 21 M120 21 C120.4 35.2, 122.22 49.65, 120 63 M120 21 C119.43 36.1, 119.24 50.13, 120 63 M120 63 C121.48 77.15, 114.84 83.95, 99 84 M120 63 C120.11 77.65, 114.05 84.8, 99 84 M99 84 C78.73 84.4, 55.44 85.46, 21 84 M99 84 C73.54 85.51, 47.65 84.39, 21 84 M21 84 C7.26 85.89, 1.81 78.86, 0 63 M21 84 C6.41 82.48, 1.39 74.75, 0 63 M0 63 C-0.78 46.96, 0.44 32.71, 0 21 M0 63 C0.09 53, 0.8 42.37, 0 21 M0 21 C-1.25 7.69, 5.57 0.9, 21 0 M0 21 C-1.06 8.97, 7.88 -0.51, 21 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(94.0250015258789 628.5) rotate(0 36.474998474121094 12.5)"><text x="36.474998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">OpDesc</text></g><g transform="translate(249.8499984741211 251.5) rotate(0 126.1500015258789 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Eager Style Graph Builder</text></g><g stroke-linecap="round" transform="translate(174 387) rotate(0 198 29.5)"><path d="M14.75 0 C123.79 2.14, 230.73 1.72, 381.25 0 C388.94 -1.97, 395.9 7.33, 396 14.75 C399.41 24.41, 394.88 32.13, 396 44.25 C395.44 53.63, 389.59 58.14, 381.25 59 C296.81 62.5, 209.75 59.79, 14.75 59 C8.43 61.09, 3.23 57.22, 0 44.25 C-3.49 33.37, -2.86 22.52, 0 14.75 C-2.1 5.1, 1.94 2.33, 14.75 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.75 0 C133.62 1.67, 250.48 1.57, 381.25 0 M14.75 0 C103.77 0.33, 192.5 0.6, 381.25 0 M381.25 0 C391.31 1.22, 395.67 5.72, 396 14.75 M381.25 0 C391.19 -0.94, 398.22 6.33, 396 14.75 M396 14.75 C394.57 21, 397.81 25.82, 396 44.25 M396 14.75 C394.95 20.84, 395.04 27.36, 396 44.25 M396 44.25 C396.05 52.7, 389.14 57.62, 381.25 59 M396 44.25 C395.01 54.81, 391.23 60.55, 381.25 59 M381.25 59 C245.94 61.8, 110.14 61.33, 14.75 59 M381.25 59 C246.57 59.05, 112.15 58.42, 14.75 59 M14.75 59 C5.44 57.1, -0.34 53.43, 0 44.25 M14.75 59 C3.6 59.4, -1.12 55.11, 0 44.25 M0 44.25 C0.21 33.5, 2.01 21.04, 0 14.75 M0 44.25 C0.21 37.03, 0.15 28.38, 0 14.75 M0 14.75 C1 6.9, 5.31 1.22, 14.75 0 M0 14.75 C-2 3.66, 6.42 -0.84, 14.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(328.3916664123535 404) rotate(0 43.608333587646484 12.5)"><text x="43.608333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">C Builder</text></g><g stroke-linecap="round" transform="translate(176 314.5) rotate(0 94.5 29.5)"><path d="M14.75 0 C70.53 -1.31, 123.96 -3.96, 174.25 0 C187.25 -0.02, 189.35 4.29, 189 14.75 C191.79 25.18, 192.41 38.05, 189 44.25 C192.13 53.23, 183.55 56.46, 174.25 59 C114.25 58.95, 53.07 57.41, 14.75 59 C8.08 57.06, 1.02 53.24, 0 44.25 C-2.1 31.31, 0.25 27.8, 0 14.75 C1.01 4.02, 2.97 3.02, 14.75 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.75 0 C71.36 -1.39, 128.36 2.17, 174.25 0 M14.75 0 C69.54 1.28, 123.01 0.04, 174.25 0 M174.25 0 C183.28 0.85, 188.43 3.72, 189 14.75 M174.25 0 C183.78 -2.23, 188.65 4.19, 189 14.75 M189 14.75 C187.6 24.47, 187.98 36.43, 189 44.25 M189 14.75 C189.83 22.56, 189.67 33.16, 189 44.25 M189 44.25 C190.06 54.81, 182.53 58.74, 174.25 59 M189 44.25 C190.11 52.54, 185.73 56.92, 174.25 59 M174.25 59 C120.7 58.64, 67.58 60.14, 14.75 59 M174.25 59 C115.14 59.92, 55.85 59.32, 14.75 59 M14.75 59 C6.64 57.07, -1.75 54.43, 0 44.25 M14.75 59 C3.53 58.65, -1.06 51.95, 0 44.25 M0 44.25 C1.42 30.77, 0.79 19.98, 0 14.75 M0 44.25 C-0.88 32.63, 0.33 20.28, 0 14.75 M0 14.75 C1.62 4.63, 3.03 -1.93, 14.75 0 M0 14.75 C-0.11 6.85, 6.4 1.38, 14.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(215.89166641235352 331.5) rotate(0 54.608333587646484 12.5)"><text x="54.608333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">C++ Builder</text></g><g stroke-linecap="round" transform="translate(379.5 312.5) rotate(0 94.5 29.5)"><path d="M14.75 0 C76.67 1.7, 137.51 -3.34, 174.25 0 C182.14 -0.65, 191.79 6.71, 189 14.75 C192.68 22.88, 185.75 25.49, 189 44.25 C189.93 56.36, 186.46 61.87, 174.25 59 C121.41 59.24, 70.31 60.29, 14.75 59 C6.35 57.49, -3.04 57.28, 0 44.25 C2.21 34.35, 2.51 25.25, 0 14.75 C3.49 4.53, 4.21 -0.62, 14.75 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.75 0 C66.26 -0.71, 118.32 -1.18, 174.25 0 M14.75 0 C70.58 -0.64, 125.65 -1.95, 174.25 0 M174.25 0 C182.13 -1.73, 190.39 5.72, 189 14.75 M174.25 0 C185.98 -2.23, 188.18 4.2, 189 14.75 M189 14.75 C188.18 19.12, 188.67 28.17, 189 44.25 M189 14.75 C190.01 27.09, 188.33 38.31, 189 44.25 M189 44.25 C189.42 53.3, 182.43 59.1, 174.25 59 M189 44.25 C189.72 53.02, 185.38 59.34, 174.25 59 M174.25 59 C126.02 60.63, 73.48 58.96, 14.75 59 M174.25 59 C140.17 61.42, 107.63 59.64, 14.75 59 M14.75 59 C3.49 58.1, -0.57 55.97, 0 44.25 M14.75 59 C7.18 60.9, 1.31 54.86, 0 44.25 M0 44.25 C-1.29 35.1, -1.09 27.82, 0 14.75 M0 44.25 C0.37 38.71, 1.04 32.17, 0 14.75 M0 14.75 C0.46 6.06, 3.07 0.29, 14.75 0 M0 14.75 C-0.81 6.37, 6.77 2.05, 14.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(401.94166564941406 329.5) rotate(0 72.05833435058594 12.5)"><text x="72.05833435058594" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Python Builder</text></g><g stroke-linecap="round" transform="translate(374 475.5) rotate(0 149 43.5)"><path d="M21.75 0 C82.45 -2.59, 141.6 -2.52, 276.25 0 M21.75 0 C107.01 0.95, 190.28 -0.17, 276.25 0 M276.25 0 C290.8 -0.38, 297.94 7.2, 298 21.75 M276.25 0 C290.7 0.73, 296.8 6.93, 298 21.75 M298 21.75 C297 32.78, 297.32 41.48, 298 65.25 M298 21.75 C297.18 34.52, 298.45 46.03, 298 65.25 M298 65.25 C299.21 78.1, 292.03 86.84, 276.25 87 M298 65.25 C297.39 79.22, 288.97 85.7, 276.25 87 M276.25 87 C191.46 86.51, 103.41 86.3, 21.75 87 M276.25 87 C209.97 89.44, 143.14 88.32, 21.75 87 M21.75 87 C5.32 87.26, -1.22 78.45, 0 65.25 M21.75 87 C5.27 88.05, 0.92 80.9, 0 65.25 M0 65.25 C-1.63 50.37, 1.28 32.82, 0 21.75 M0 65.25 C-0.53 56.35, -0.92 46.39, 0 21.75 M0 21.75 C-1.6 6.83, 7.92 1.74, 21.75 0 M0 21.75 C1.93 8.84, 5.94 0.69, 21.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(494.6916675567627 506.5) rotate(0 28.308332443237305 12.5)"><text x="28.308332443237305" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Graph</text></g><g stroke-linecap="round" transform="translate(349 597) rotate(0 78 42)"><path d="M21 0 C60.06 2.33, 101.74 1.66, 135 0 M21 0 C61.95 -0.57, 102.55 0.48, 135 0 M135 0 C147.72 -0.69, 156.78 8.22, 156 21 M135 0 C151.06 -0.24, 155.39 4.98, 156 21 M156 21 C157.74 33.32, 155.36 47.85, 156 63 M156 21 C156.01 30.49, 155.86 38.93, 156 63 M156 63 C155.15 76.19, 150.48 84.61, 135 84 M156 63 C158.04 75.25, 149.48 82.37, 135 84 M135 84 C95.81 84.88, 60.75 85.38, 21 84 M135 84 C102.36 84.89, 68.74 84.7, 21 84 M21 84 C5.66 83.61, 1.86 76.93, 0 63 M21 84 C7.18 85.62, -0.04 74.85, 0 63 M0 63 C0.78 55.62, 1.25 45.43, 0 21 M0 63 C0.63 52.62, 0.88 43.17, 0 21 M0 21 C0.33 7.28, 7.77 0.12, 21 0 M0 21 C-2.24 6.24, 9.15 0, 21 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(358.0166702270508 626.5) rotate(0 68.98332977294922 12.5)"><text x="68.98332977294922" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ComputeGraph</text></g><g stroke-linecap="round" transform="translate(209 596) rotate(0 60 42)"><path d="M21 0 C46.54 0.03, 69.16 0.02, 99 0 M21 0 C44.3 -0.05, 68.51 -0.89, 99 0 M99 0 C114.36 -0.22, 118.71 8.54, 120 21 M99 0 C112.47 -1.03, 118.13 8.27, 120 21 M120 21 C119.72 36.56, 120.63 51.61, 120 63 M120 21 C120.37 31.03, 120.78 39.49, 120 63 M120 63 C120.25 76.15, 113.45 84.66, 99 84 M120 63 C120.26 75.54, 114.91 85.93, 99 84 M99 84 C72.82 82.49, 50.76 84.14, 21 84 M99 84 C71.2 82.57, 43.3 84.05, 21 84 M21 84 C6.23 84.42, -0.94 78.56, 0 63 M21 84 C5.08 85.51, -2.29 78.63, 0 63 M0 63 C1.83 51.29, 0.59 34.33, 0 21 M0 63 C-0.11 46.71, 0.06 31.66, 0 21 M0 21 C0.9 8.31, 5.82 -0.69, 21 0 M0 21 C-2 6.84, 7.42 2.07, 21 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(245.26666641235352 625.5) rotate(0 23.733333587646484 12.5)"><text x="23.733333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Node</text></g><g stroke-linecap="round" transform="translate(531 595) rotate(0 60 42)"><path d="M21 0 C41.28 1.55, 63.74 1.13, 99 0 M21 0 C47.93 0.85, 74.99 -0.07, 99 0 M99 0 C114.97 -0.22, 120.87 8.9, 120 21 M99 0 C111.04 -0.34, 121.97 6.4, 120 21 M120 21 C118.67 38.24, 121.46 52.73, 120 63 M120 21 C120.86 29.61, 120.05 37.96, 120 63 M120 63 C120.67 77.86, 114.37 85.6, 99 84 M120 63 C118.99 78.09, 112.99 86.11, 99 84 M99 84 C81.43 84.74, 65.07 86.28, 21 84 M99 84 C71.05 83.61, 44.39 84.31, 21 84 M21 84 C7.33 83.07, 0.47 75.9, 0 63 M21 84 C8.3 86, 0.76 77.53, 0 63 M0 63 C-0.82 49.5, 0.76 36.99, 0 21 M0 63 C0.24 51.72, -0.03 41.73, 0 21 M0 21 C1.44 7.5, 6.88 -1.86, 21 0 M0 21 C-0.21 8.26, 6.51 -0.62, 21 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(582.7749996185303 624.5) rotate(0 8.225000381469727 12.5)"><text x="8.225000381469727" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">...</text></g></svg>
@@ -0,0 +1,8 @@
1+<?xml version="1.0" standalone="no"?>
2+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 736.7621372767856 890.6428658621651" width="736.7621372767856" height="890.6428658621651"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
4+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
5+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAARwABEAAAAADNwAAAQYAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgmiCQgsGAAE2AiQDCAQgBYJeByAMFBuDC8iOwra1c1xHUqZMQGM+4uH5+9W57000bRXP/E3gtcZIwMUUay3AJFxvkOU5/r1s3hpVipeCzG6J3VTeHuQcrPSYkz8F/F0v//+9+vHfjGUBG1ssL+ffLNGIrDU7J0+QlrC0eA2KdlJPQYpS8X6d6Cgz8/z7kwi0AIEkhEDDBHdo2VpUBTIl6PMwcHXON9AiEJMkxHEie4fYkC1KIYEcLoBFzbrVrVwbZB4sleYJB/ODQXQPWHQkQhuf3wdIZcF/zGzpFocZAxwORSoyAyU6OgeXPI/0/cChCWUD3o98ByhWOFBt2nsRWkBziJ/BATV5AlTyYWMYB6jA2OKgWNQcxoGg4AB1yTAOhAW2skI/a4Xdh8YMZvLbGWzF3S3trMgvcba+qIOhIzALlVsOzELVFslm0oSzqYOmk8M4EG3BFa1gaGzFPYu5PU7xLfvCOBAXhZgV+pfZy+3sZIpgMymaIElsYc+X2dnzFEHSdBgHkks6k+oEh8t1QZqUdMWIbINgpewUKzTDVBI+JFYxDMH40NaJHAKJn5nmYPZSoZ+FQ5PL2luTfUiCEz6kehZNkDQVxoG8KJyQsFAQk3RQ8bm2QcaXEUpQcZXmV1NoDV7LQAd6jk5ooDMJMDb5f8F7k0aEiTCDE9dsfmcK7YJ3ZeAGBMeNre5EeiA8CS/AXC/zkxTaG+/DwBf8OL5s9ScyABFIBEEwN8j8IRQ6FB/GIBwiOOFsjSTDqKkAZDXJCNTnZZBAKVt7AdyBJpgybfsMUPivQaiK8V+BiJ3KuWabrYrZgaYcvO/lS/P85jpv9FppD5fD5JEWcZfLk6J1XZVtCvOqCzWMSXLlG58VTGy1y7JWxdyz7t+33UdTjl+zoY0KvVoy0PZdr0z97zy4U7XMPUcaeNt13X6Rf9/ekS2nSNWFtQjltKLaBrXc1Tt7mY5IXeOyhHDqNfx+cfOhc9I6g2x9njjotMuS8R4lsj8j1i4U9HPXSOBBo7RoCQqa9h7BAbkC80tk+ZOT1jovPZ0zaAo6tnTXPjdJ0FmTW73rWclx8cZYU/7k++IwKjjoEKHyiLGc5u8evmyXCcpEzh7Xcevu/9Xr5omgGfyihCZt6l+ZUvgBgI/Hb74AfPb8lvBv+KDSvzwEQE1a4PkPJUr/A6L/X44LrpvH8h/Uy+OUPkOAwI3IkuZ1r6raIRQlOdD1qFCHAVfVSce7OpvD7C0Nq8tOGIIV8+vAFocWg/TXwqFSjhodhhrGYZCBsBjhokRJQenQpsMArRhisULlcrTIwIGwdfpwuBxDEWzJYFAZi9ogGhmUo8U3gjg5XawwrRyGXyKMlaMlK8EKlLuMmHjo0GVORT7IYGP0Hbp0G75390UvxYrY5bIRcu31B4vUeBfY08ATTKBIQQ8=); }
6+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
7+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAATMABEAAAAADVwAAARyAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAAPAgKCY4uERAKg1yDFQsIAAE2AiQDCgQgBYJeByAMFBvgC8iOk6VGij8f+k3rDQOpC+12iCjUldQ0SUNNN3tuK0pPXFjn1PRrb9MAWB1b7fs1PXmbsIxwiELmZ+6FjI1RQD+AitCX0KMwrZJ16FPVCoeyio2r9L1Bd5OC9bcRBEAi3AEHYqV5Jx4F3l9C1M7+AGLBA0A0CgADV1D6BrkQAsDBBUCOxUYTlSR2DUcsoMQFYmLxRv11jaP1w5NX02OjxwI9FhfO8eSGz98HOIE7DIBBAMABoAAyQUGggYcbli4Btzh9jSzaeOvuW9eDwO0LyKTv0gTkPhOJw+HdhJyvmSS6zYS6B5EIOjujmCAyY/6IapA5xQQnmyBeSTFBZdZpUEfnaNimMZ3pPUs662Tr55cM3oFSrQ9a1rUSZmCsCDMQSDJaNdHZs6xp9YoJfgslv0nXWCfbsFi5IUX4/yOeSpD7mEGdw+GRsLFRFY1WVRMlifmNJ4bDxhOqKGmaYsJyyVQyOCuSe13ENC1eUondgI+xFOlrul5p2CS4RddF3aZZF5oEVN3aNjF7PXX4TbJxuH260SaJaBmbZJM0UdJUxUSc3DcW9qtCL2k8/nMTI1YdyyQgUZkQ/SSBnExPkZCKNEWqNl1sZRBu4//Ce7MZhEwmC9nKrOjnCORcep6EfIiKfLkWALaQsI4pAlMWRV8SyFa6TYIdDoVdrk7AughuxgOv0hN9n0CW6YqEYpQoiuVaCkLLJgCofTeHXJBoFBQAoqol4zcwPAuo+fsTcB2NbP6l0OVEvCJhzXOXo+IGsik056wG3ZGQtXj1nubLH53z8PsNcwcIEQ/WJO3Hxsx33mkMLjouQ+6t8bfH34SNoPNEMH785P3xKxLa1l55Y+67wYmAKbvGTC+1h4KtxY3Zxsz44LsJa10zd+jvfRW6N3DpDFn5HtmUsBi6gbeukzZv3PjOpPRq4xvIkUG89H/di13+q3MvfjAt/ZWMXs9BtYRvWxM8jzQ+4LXsD1V4hOMeSE6+d6WtK9EtBOyWm5X5KUd23GRdz0h7ba1eQvquy7nkZzv7uk0pjJ0T5y/DNr9Qu5YbON7x9It5nmtyTr+y95z6YA5/4RskYIvZ3PMP6bs69+IXyXOE3PJkj55m2frDn/upMVe409U+9lftl/Plx+KFxtMaYsqHP4Mtxp2nTjmVABH8qrfulXK1rMhyG/EfejnX82jmQfkyIXFxiwkAAAFACzyDn7r2zqY0/hubQH8AgA9u+c0OAF/7HBdHv4l6+EP0OACx4BZk/1oN/t8B3eFfzoHAzSJP0B8wYclEuZ/hqmKSWK7iAB7DRHqIjwPgxUeFjSATz9k4JMO0URRDP8oP2wScKp1bzNsBYRHzjnGkeRFjOoQsO94JIo5xNIYKFKMMZWiAatmiZUdZgDcxVEIGQzlKg14DOqd3TtQx0Fk2n+GYHkPZBtXSoFeO6gZnyeUqoWBBxImXKDN+tnrOR2Fv1UkTTz1+WYqbjnGs01wjVq134tG7LnojQ7+wLuMo3GTRY5VibMLtk1iHTMS34AMAAA==); }
8+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="736.7621372767856" height="890.6428658621651" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 10) rotate(0 355.9999999999999 46)"><path d="M23 0 C264.13 -2.38, 506.62 -2.14, 689 0 M23 0 C215.22 1.12, 406.51 1.09, 689 0 M689 0 C705.59 0.85, 710.23 6.53, 712 23 M689 0 C706.26 -0.16, 713.69 5.56, 712 23 M712 23 C711.54 38.18, 713.58 56.21, 712 69 M712 23 C712.04 39.53, 713.16 54.79, 712 69 M712 69 C712.23 82.97, 702.55 92.42, 689 92 M712 69 C710.56 85.17, 704.91 91.24, 689 92 M689 92 C530.33 92.46, 370.81 93.31, 23 92 M689 92 C505.45 90.9, 321.02 90.37, 23 92 M23 92 C9.65 93.39, -1.95 85.06, 0 69 M23 92 C7.37 90.28, -2.05 83.5, 0 69 M0 69 C0.74 59.54, 2.12 50.64, 0 23 M0 69 C-0.41 50.71, 0.21 32.77, 0 23 M0 23 C0.21 8.57, 9.01 0.09, 23 0 M0 23 C0.88 8.24, 7.41 0.83, 23 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(345.28001403808594 43.5) rotate(0 20.719985961914062 12.5)"><text x="20.719985961914062" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">APP</text></g><g stroke-linecap="round" transform="translate(12.285749162946331 377.5476422991071) rotate(0 356 251.547611781529)"><path d="M32 0 C164.25 -1.95, 295.88 -2.58, 680 0 C701.54 -3.19, 713.23 11.53, 712 32 C711.78 126.56, 712.04 225.89, 712 471.1 C713.33 494.97, 703.5 503.54, 680 503.1 C541.38 503.97, 403.09 505.12, 32 503.1 C11.57 504.62, -1.84 495.99, 0 471.1 C2.16 341.72, 1.45 214.78, 0 32 C-1.53 14.23, 12.09 0.95, 32 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M32 0 C199.04 1.42, 367.39 1.32, 680 0 M32 0 C252.18 2.49, 473.31 2.12, 680 0 M680 0 C702.73 -0.96, 710.74 11.09, 712 32 M680 0 C699.97 -2.1, 712.16 12.3, 712 32 M712 32 C713.36 166.95, 712.4 300.61, 712 471.1 M712 32 C713.29 156.08, 713.12 279.97, 712 471.1 M712 471.1 C711.61 493.79, 700.91 503.8, 680 503.1 M712 471.1 C713.85 493.28, 700.9 502.53, 680 503.1 M680 503.1 C539.64 501.91, 398.34 502.14, 32 503.1 M680 503.1 C505 502.48, 328.94 503, 32 503.1 M32 503.1 C10.16 502.19, -1.64 491.48, 0 471.1 M32 503.1 C8.78 503.57, -2.2 494.51, 0 471.1 M0 471.1 C-0.54 320.4, 0.5 167.24, 0 32 M0 471.1 C2.14 332.83, 1.75 194.95, 0 32 M0 32 C0.77 9.66, 12.47 -0.75, 32 0 M0 32 C-0.94 11.33, 10.1 -0.14, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(353.41575404575883 382.5476422991071) rotate(0 14.8699951171875 12.5)"><text x="14.8699951171875" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">GE</text></g><g stroke-linecap="round" transform="translate(67.28574916294633 659.5714372907366) rotate(0 149 43.5)"><path d="M21.75 0 C115.26 0, 209.84 0.91, 276.25 0 M21.75 0 C110.01 0.63, 196.89 0.2, 276.25 0 M276.25 0 C289.83 0.51, 296.73 6.04, 298 21.75 M276.25 0 C291.48 -1.43, 297.65 4.99, 298 21.75 M298 21.75 C296.86 39.64, 296.99 57.37, 298 65.25 M298 21.75 C297.4 35.11, 297.23 47.11, 298 65.25 M298 65.25 C298.11 77.96, 289.46 86.57, 276.25 87 M298 65.25 C298.81 78.34, 289.74 86.55, 276.25 87 M276.25 87 C225.02 83.86, 171.98 86.22, 21.75 87 M276.25 87 C208.87 88.4, 142.02 88.9, 21.75 87 M21.75 87 C5.89 87.82, -0.59 78.6, 0 65.25 M21.75 87 C5.72 88.17, 1.02 80.87, 0 65.25 M0 65.25 C-0.49 55.13, 0.91 43.1, 0 21.75 M0 65.25 C0.65 54.85, -0.94 46.19, 0 21.75 M0 21.75 C-1.64 6.96, 7.49 0.31, 21.75 0 M0 21.75 C-2.16 7.29, 6.33 0.07, 21.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(172.96074840000688 690.5714372907366) rotate(0 43.32500076293945 12.5)"><text x="43.32500076293945" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Operator</text></g><g stroke-linecap="round" transform="translate(69.95237513950883 417.23812430245533) rotate(0 219 114.5)"><path d="M32 0 C124.97 4.92, 213.63 3.01, 406 0 C426.43 1.08, 436.76 12.92, 438 32 C436.54 94.19, 436.16 155.64, 438 197 C440.23 216.28, 428.48 230.87, 406 229 C256.65 229.42, 106.29 228.23, 32 229 C8.9 225.91, 0.89 221.42, 0 197 C-0.68 154.42, 0.9 106.99, 0 32 C0.76 8.68, 9.07 -1.29, 32 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M32 0 C157.61 -0.07, 280.26 -0.63, 406 0 M32 0 C117.43 1.46, 202.21 0.76, 406 0 M406 0 C426.88 0.86, 438.49 9.71, 438 32 M406 0 C425.83 -1.4, 438.79 12.71, 438 32 M438 32 C441.39 80.68, 441.08 127.17, 438 197 M438 32 C437.96 65.08, 437.67 99.53, 438 197 M438 197 C438.34 217.37, 426.75 230.66, 406 229 M438 197 C438.31 219.7, 426.7 228.53, 406 229 M406 229 C290.53 227.84, 175.33 227.15, 32 229 M406 229 C283.9 227.26, 160.62 227.23, 32 229 M32 229 C9.54 227.82, 1.59 217.7, 0 197 M32 229 C9.74 230.93, -0.53 217.98, 0 197 M0 197 C1.18 156.81, -0.03 114.41, 0 32 M0 197 C0.33 131.55, 0.68 67.76, 0 32 M0 32 C0.43 10.72, 11.58 1.44, 32 0 M0 32 C-1.84 12.4, 9.95 -0.15, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(72.78574916294633 781.5714372907366) rotate(0 60 42)"><path d="M21 0 C41.24 0.21, 62.08 1.5, 99 0 M21 0 C49.04 1.19, 79.33 1.43, 99 0 M99 0 C112.19 -1.45, 120.39 7.21, 120 21 M99 0 C114.33 2.18, 117.94 8.07, 120 21 M120 21 C120.4 35.2, 122.22 49.65, 120 63 M120 21 C119.43 36.1, 119.24 50.13, 120 63 M120 63 C121.48 77.15, 114.84 83.95, 99 84 M120 63 C120.11 77.65, 114.05 84.8, 99 84 M99 84 C78.73 84.4, 55.44 85.46, 21 84 M99 84 C73.54 85.51, 47.65 84.39, 21 84 M21 84 C7.26 85.89, 1.81 78.86, 0 63 M21 84 C6.41 82.48, 1.39 74.75, 0 63 M0 63 C-0.78 46.96, 0.44 32.71, 0 21 M0 63 C0.09 53, 0.8 42.37, 0 21 M0 21 C-1.25 7.69, 5.57 0.9, 21 0 M0 21 C-1.06 8.97, 7.88 -0.51, 21 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(96.31075068882524 811.0714372907366) rotate(0 36.474998474121094 12.5)"><text x="36.474998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">OpDesc</text></g><g transform="translate(167.46899959019242 436.73812430245533) rotate(0 126.1500015258789 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Eager Style Graph Builder</text></g><g stroke-linecap="round" transform="translate(91.61900111607133 572.2381243024554) rotate(0 198 29.5)"><path d="M14.75 0 C123.79 2.14, 230.73 1.72, 381.25 0 C388.94 -1.97, 395.9 7.33, 396 14.75 C399.41 24.41, 394.88 32.13, 396 44.25 C395.44 53.63, 389.59 58.14, 381.25 59 C296.81 62.5, 209.75 59.79, 14.75 59 C8.43 61.09, 3.23 57.22, 0 44.25 C-3.49 33.37, -2.86 22.52, 0 14.75 C-2.1 5.1, 1.94 2.33, 14.75 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.75 0 C133.62 1.67, 250.48 1.57, 381.25 0 M14.75 0 C103.77 0.33, 192.5 0.6, 381.25 0 M381.25 0 C391.31 1.22, 395.67 5.72, 396 14.75 M381.25 0 C391.19 -0.94, 398.22 6.33, 396 14.75 M396 14.75 C394.57 21, 397.81 25.82, 396 44.25 M396 14.75 C394.95 20.84, 395.04 27.36, 396 44.25 M396 44.25 C396.05 52.7, 389.14 57.62, 381.25 59 M396 44.25 C395.01 54.81, 391.23 60.55, 381.25 59 M381.25 59 C245.94 61.8, 110.14 61.33, 14.75 59 M381.25 59 C246.57 59.05, 112.15 58.42, 14.75 59 M14.75 59 C5.44 57.1, -0.34 53.43, 0 44.25 M14.75 59 C3.6 59.4, -1.12 55.11, 0 44.25 M0 44.25 C0.21 33.5, 2.01 21.04, 0 14.75 M0 44.25 C0.21 37.03, 0.15 28.38, 0 14.75 M0 14.75 C1 6.9, 5.31 1.22, 14.75 0 M0 14.75 C-2 3.66, 6.42 -0.84, 14.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(246.01066752842485 589.2381243024554) rotate(0 43.608333587646484 12.5)"><text x="43.608333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">C Builder</text></g><g stroke-linecap="round" transform="translate(93.61900111607133 499.73812430245533) rotate(0 94.5 29.5)"><path d="M14.75 0 C70.53 -1.31, 123.96 -3.96, 174.25 0 C187.25 -0.02, 189.35 4.29, 189 14.75 C191.79 25.18, 192.41 38.05, 189 44.25 C192.13 53.23, 183.55 56.46, 174.25 59 C114.25 58.95, 53.07 57.41, 14.75 59 C8.08 57.06, 1.02 53.24, 0 44.25 C-2.1 31.31, 0.25 27.8, 0 14.75 C1.01 4.02, 2.97 3.02, 14.75 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.75 0 C71.36 -1.39, 128.36 2.17, 174.25 0 M14.75 0 C69.54 1.28, 123.01 0.04, 174.25 0 M174.25 0 C183.28 0.85, 188.43 3.72, 189 14.75 M174.25 0 C183.78 -2.23, 188.65 4.19, 189 14.75 M189 14.75 C187.6 24.47, 187.98 36.43, 189 44.25 M189 14.75 C189.83 22.56, 189.67 33.16, 189 44.25 M189 44.25 C190.06 54.81, 182.53 58.74, 174.25 59 M189 44.25 C190.11 52.54, 185.73 56.92, 174.25 59 M174.25 59 C120.7 58.64, 67.58 60.14, 14.75 59 M174.25 59 C115.14 59.92, 55.85 59.32, 14.75 59 M14.75 59 C6.64 57.07, -1.75 54.43, 0 44.25 M14.75 59 C3.53 58.65, -1.06 51.95, 0 44.25 M0 44.25 C1.42 30.77, 0.79 19.98, 0 14.75 M0 44.25 C-0.88 32.63, 0.33 20.28, 0 14.75 M0 14.75 C1.62 4.63, 3.03 -1.93, 14.75 0 M0 14.75 C-0.11 6.85, 6.4 1.38, 14.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(133.51066752842485 516.7381243024554) rotate(0 54.608333587646484 12.5)"><text x="54.608333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">C++ Builder</text></g><g stroke-linecap="round" transform="translate(297.11900111607133 497.73812430245533) rotate(0 94.5 29.5)"><path d="M14.75 0 C76.67 1.7, 137.51 -3.34, 174.25 0 C182.14 -0.65, 191.79 6.71, 189 14.75 C192.68 22.88, 185.75 25.49, 189 44.25 C189.93 56.36, 186.46 61.87, 174.25 59 C121.41 59.24, 70.31 60.29, 14.75 59 C6.35 57.49, -3.04 57.28, 0 44.25 C2.21 34.35, 2.51 25.25, 0 14.75 C3.49 4.53, 4.21 -0.62, 14.75 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.75 0 C66.26 -0.71, 118.32 -1.18, 174.25 0 M14.75 0 C70.58 -0.64, 125.65 -1.95, 174.25 0 M174.25 0 C182.13 -1.73, 190.39 5.72, 189 14.75 M174.25 0 C185.98 -2.23, 188.18 4.2, 189 14.75 M189 14.75 C188.18 19.12, 188.67 28.17, 189 44.25 M189 14.75 C190.01 27.09, 188.33 38.31, 189 44.25 M189 44.25 C189.42 53.3, 182.43 59.1, 174.25 59 M189 44.25 C189.72 53.02, 185.38 59.34, 174.25 59 M174.25 59 C126.02 60.63, 73.48 58.96, 14.75 59 M174.25 59 C140.17 61.42, 107.63 59.64, 14.75 59 M14.75 59 C3.49 58.1, -0.57 55.97, 0 44.25 M14.75 59 C7.18 60.9, 1.31 54.86, 0 44.25 M0 44.25 C-1.29 35.1, -1.09 27.82, 0 14.75 M0 44.25 C0.37 38.71, 1.04 32.17, 0 14.75 M0 14.75 C0.46 6.06, 3.07 0.29, 14.75 0 M0 14.75 C-0.81 6.37, 6.77 2.05, 14.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(319.5606667654854 514.7381243024554) rotate(0 72.05833435058594 12.5)"><text x="72.05833435058594" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Python Builder</text></g><g stroke-linecap="round" transform="translate(376.28574916294633 658.0714372907366) rotate(0 149 43.5)"><path d="M21.75 0 C82.45 -2.59, 141.6 -2.52, 276.25 0 M21.75 0 C107.01 0.95, 190.28 -0.17, 276.25 0 M276.25 0 C290.8 -0.38, 297.94 7.2, 298 21.75 M276.25 0 C290.7 0.73, 296.8 6.93, 298 21.75 M298 21.75 C297 32.78, 297.32 41.48, 298 65.25 M298 21.75 C297.18 34.52, 298.45 46.03, 298 65.25 M298 65.25 C299.21 78.1, 292.03 86.84, 276.25 87 M298 65.25 C297.39 79.22, 288.97 85.7, 276.25 87 M276.25 87 C191.46 86.51, 103.41 86.3, 21.75 87 M276.25 87 C209.97 89.44, 143.14 88.32, 21.75 87 M21.75 87 C5.32 87.26, -1.22 78.45, 0 65.25 M21.75 87 C5.27 88.05, 0.92 80.9, 0 65.25 M0 65.25 C-1.63 50.37, 1.28 32.82, 0 21.75 M0 65.25 C-0.53 56.35, -0.92 46.39, 0 21.75 M0 21.75 C-1.6 6.83, 7.92 1.74, 21.75 0 M0 21.75 C1.93 8.84, 5.94 0.69, 21.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(496.977416719709 689.0714372907366) rotate(0 28.308332443237305 12.5)"><text x="28.308332443237305" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Graph</text></g><g stroke-linecap="round" transform="translate(351.28574916294633 779.5714372907366) rotate(0 78 42)"><path d="M21 0 C60.06 2.33, 101.74 1.66, 135 0 M21 0 C61.95 -0.57, 102.55 0.48, 135 0 M135 0 C147.72 -0.69, 156.78 8.22, 156 21 M135 0 C151.06 -0.24, 155.39 4.98, 156 21 M156 21 C157.74 33.32, 155.36 47.85, 156 63 M156 21 C156.01 30.49, 155.86 38.93, 156 63 M156 63 C155.15 76.19, 150.48 84.61, 135 84 M156 63 C158.04 75.25, 149.48 82.37, 135 84 M135 84 C95.81 84.88, 60.75 85.38, 21 84 M135 84 C102.36 84.89, 68.74 84.7, 21 84 M21 84 C5.66 83.61, 1.86 76.93, 0 63 M21 84 C7.18 85.62, -0.04 74.85, 0 63 M0 63 C0.78 55.62, 1.25 45.43, 0 21 M0 63 C0.63 52.62, 0.88 43.17, 0 21 M0 21 C0.33 7.28, 7.77 0.12, 21 0 M0 21 C-2.24 6.24, 9.15 0, 21 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(360.3024193899971 809.0714372907366) rotate(0 68.98332977294922 12.5)"><text x="68.98332977294922" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ComputeGraph</text></g><g stroke-linecap="round" transform="translate(211.28574916294633 778.5714372907366) rotate(0 60 42)"><path d="M21 0 C46.54 0.03, 69.16 0.02, 99 0 M21 0 C44.3 -0.05, 68.51 -0.89, 99 0 M99 0 C114.36 -0.22, 118.71 8.54, 120 21 M99 0 C112.47 -1.03, 118.13 8.27, 120 21 M120 21 C119.72 36.56, 120.63 51.61, 120 63 M120 21 C120.37 31.03, 120.78 39.49, 120 63 M120 63 C120.25 76.15, 113.45 84.66, 99 84 M120 63 C120.26 75.54, 114.91 85.93, 99 84 M99 84 C72.82 82.49, 50.76 84.14, 21 84 M99 84 C71.2 82.57, 43.3 84.05, 21 84 M21 84 C6.23 84.42, -0.94 78.56, 0 63 M21 84 C5.08 85.51, -2.29 78.63, 0 63 M0 63 C1.83 51.29, 0.59 34.33, 0 21 M0 63 C-0.11 46.71, 0.06 31.66, 0 21 M0 21 C0.9 8.31, 5.82 -0.69, 21 0 M0 21 C-2 6.84, 7.42 2.07, 21 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(247.55241557529985 808.0714372907366) rotate(0 23.733333587646484 12.5)"><text x="23.733333587646484" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Node</text></g><g stroke-linecap="round" transform="translate(533.2857491629463 777.5714372907366) rotate(0 60 42)"><path d="M21 0 C41.28 1.55, 63.74 1.13, 99 0 M21 0 C47.93 0.85, 74.99 -0.07, 99 0 M99 0 C114.97 -0.22, 120.87 8.9, 120 21 M99 0 C111.04 -0.34, 121.97 6.4, 120 21 M120 21 C118.67 38.24, 121.46 52.73, 120 63 M120 21 C120.86 29.61, 120.05 37.96, 120 63 M120 63 C120.67 77.86, 114.37 85.6, 99 84 M120 63 C118.99 78.09, 112.99 86.11, 99 84 M99 84 C81.43 84.74, 65.07 86.28, 21 84 M99 84 C71.05 83.61, 44.39 84.31, 21 84 M21 84 C7.33 83.07, 0.47 75.9, 0 63 M21 84 C8.3 86, 0.76 77.53, 0 63 M0 63 C-0.82 49.5, 0.76 36.99, 0 21 M0 63 C0.24 51.72, -0.03 41.73, 0 21 M0 21 C1.44 7.5, 6.88 -1.86, 21 0 M0 21 C-0.21 8.26, 6.51 -0.62, 21 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(585.0607487814766 807.0714372907366) rotate(0 8.225000381469727 12.5)"><text x="8.225000381469727" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">...</text></g><g stroke-linecap="round" transform="translate(525.2858712332588 413.48812430245533) rotate(0 74.33331298828125 114.5)"><path d="M32 0 C56.38 3.85, 84.6 4.43, 116.67 0 C138.77 0.29, 150.58 7.4, 148.67 32 C149.94 70.28, 145.84 99.15, 148.67 197 C145.95 216.46, 141.53 225.55, 116.67 229 C87.88 230.05, 51.5 231.48, 32 229 C10.07 225.47, 1.45 218.72, 0 197 C0.98 151.44, -1.2 102.39, 0 32 C1.9 12.97, 12.91 2.5, 32 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M32 0 C64.45 1.14, 96.13 -1.13, 116.67 0 M32 0 C49.04 0.35, 66.98 -0.1, 116.67 0 M116.67 0 C136.24 -0.26, 148.37 12.6, 148.67 32 M116.67 0 C138.76 1.84, 148.01 8.95, 148.67 32 M148.67 32 C148.13 84.45, 147.31 135.34, 148.67 197 M148.67 32 C150.85 84.76, 149.58 137.56, 148.67 197 M148.67 197 C146.77 216.37, 137.17 227.41, 116.67 229 M148.67 197 C147.58 216.05, 137.89 230.46, 116.67 229 M116.67 229 C91.89 229.36, 66.19 228, 32 229 M116.67 229 C87.33 228.78, 60.31 229.96, 32 229 M32 229 C9.63 229.09, 0.47 218.4, 0 197 M32 229 C9.43 230.25, -0.43 216.97, 0 197 M0 197 C-1.76 162.68, 1.44 131.06, 0 32 M0 197 C-1.13 151.21, 0.53 105.89, 0 32 M0 32 C-0.56 11.77, 9.02 -1.05, 32 0 M0 32 C0.24 11.33, 11.69 -0.54, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(532.5892388480049 515.4881243024554) rotate(0 67.02994537353516 12.5)"><text x="67.02994537353516" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb generator</text></g><g stroke-linecap="round" transform="translate(14.76213727678578 119.22610473632815) rotate(0 355.9999999999999 119.61906215122771)"><path d="M32 0 C182.45 -2.8, 333.66 -1.95, 680 0 M32 0 C199.22 0.5, 366.6 0.35, 680 0 M680 0 C699.66 -0.13, 713.58 8.68, 712 32 M680 0 C702.34 1.06, 713.79 9.43, 712 32 M712 32 C711.58 101.23, 709.47 165.49, 712 207.24 M712 32 C713.4 78.93, 713.69 125.43, 712 207.24 M712 207.24 C712.85 229.77, 699.93 237.3, 680 239.24 M712 207.24 C712.47 227.01, 703.27 238.86, 680 239.24 M680 239.24 C464.29 240.51, 247.71 240.91, 32 239.24 M680 239.24 C460.03 239.12, 239.63 239.16, 32 239.24 M32 239.24 C11.57 237.95, 1.23 229.69, 0 207.24 M32 239.24 C12 240.96, 1.76 230.4, 0 207.24 M0 207.24 C1.81 151.55, 1.39 98.69, 0 32 M0 207.24 C-1.14 160.12, -0.92 113.68, 0 32 M0 32 C1.86 12.42, 11.87 1.12, 32 0 M0 32 C0.36 11.7, 11.67 -1.8, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(349.13214765276234 124.22610473632815) rotate(0 21.629989624023438 12.5)"><text x="21.629989624023438" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">OPP</text></g><g stroke-linecap="round" transform="translate(103.80979701450906 252.17860412597656) rotate(0 104.33331298828125 44.66667175292969)"><path d="M22.33 0 C64.89 -2.12, 107.09 -1.12, 186.33 0 M22.33 0 C81.52 1.11, 142.07 0.9, 186.33 0 M186.33 0 C199.48 -0.54, 210.16 5.93, 208.67 22.33 M186.33 0 C203.39 0.7, 208.88 5.38, 208.67 22.33 M208.67 22.33 C207.1 35.53, 210.67 52.4, 208.67 67 M208.67 22.33 C209.76 35.96, 208.51 47.55, 208.67 67 M208.67 67 C210.47 80.55, 203.01 87.88, 186.33 89.33 M208.67 67 C206.39 81.56, 202.55 88.45, 186.33 89.33 M186.33 89.33 C131.38 91.86, 74.67 91.69, 22.33 89.33 M186.33 89.33 C128.06 90.39, 68.75 91.03, 22.33 89.33 M22.33 89.33 C8.52 91.07, -1.33 80.67, 0 67 M22.33 89.33 C9.07 88.99, 0.54 83.73, 0 67 M0 67 C-0.47 49.46, -1.09 31.8, 0 22.33 M0 67 C-0.86 55.53, -0.52 43.3, 0 22.33 M0 22.33 C1.41 6.1, 9.04 -0.87, 22.33 0 M0 22.33 C-1.73 6.97, 5.6 0.65, 22.33 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(148.1431100027903 284.34527587890625) rotate(0 60 12.5)"><text x="60" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">算子原型定义</text></g><g stroke-linecap="round" transform="translate(395.00019182477695 252.17861938476562) rotate(0 104.33331298828125 44.66667175292969)"><path d="M22.33 0 C76.38 1.71, 135.95 3.67, 186.33 0 C199.77 -1.42, 210.13 7.1, 208.67 22.33 C208.33 35.97, 208.51 48.96, 208.67 67 C209.92 84.44, 203.32 92.1, 186.33 89.33 C124.76 89.17, 72.27 90.58, 22.33 89.33 C9.87 86.23, -3.6 79.74, 0 67 C1.14 52.07, 1.51 40.69, 0 22.33 C-3.21 5.32, 4.3 0.31, 22.33 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M22.33 0 C83.44 -2.47, 142.62 0.03, 186.33 0 M22.33 0 C71.86 1.71, 123.8 0.37, 186.33 0 M186.33 0 C200.47 0.74, 207.21 9.15, 208.67 22.33 M186.33 0 C199.81 1.56, 206.68 5.45, 208.67 22.33 M208.67 22.33 C208.61 38.85, 210.83 51.43, 208.67 67 M208.67 22.33 C207.57 35.32, 207.82 48.16, 208.67 67 M208.67 67 C208.31 81.48, 201.6 88.19, 186.33 89.33 M208.67 67 C207.77 83.83, 200.59 89.49, 186.33 89.33 M186.33 89.33 C140.21 88.75, 91.56 91.43, 22.33 89.33 M186.33 89.33 C125.46 89.43, 64.77 89.75, 22.33 89.33 M22.33 89.33 C7.55 87.7, 1.24 81.45, 0 67 M22.33 89.33 C8.38 88.02, -1.83 82.39, 0 67 M0 67 C0.02 56.16, 1.31 44.81, 0 22.33 M0 67 C0.98 55.12, -0.21 43.48, 0 22.33 M0 22.33 C-0.87 9.27, 7.3 -0.69, 22.33 0 M0 22.33 C-0.44 7.4, 9.38 -1.46, 22.33 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(449.3335048130582 284.3452911376953) rotate(0 50 12.5)"><text x="50" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">历史原型库</text></g><g stroke-linecap="round" transform="translate(104.5292198544455 173.75265406048482) rotate(0 248.61907087053578 28.476202828543535)"><path d="M14.24 0 C124.09 -0.59, 232.78 -2.03, 483 0 C492.17 -3.2, 498.98 2.89, 497.24 14.24 C494.77 19.19, 500.49 28.24, 497.24 42.71 C496.89 49.91, 491.29 57.44, 483 56.95 C386.03 58.68, 285.99 58.37, 14.24 56.95 C2.05 55.13, -2.54 48.92, 0 42.71 C2.84 36.36, -1.91 28.46, 0 14.24 C1.45 7.26, 3.43 -1, 14.24 0" stroke="none" stroke-width="0" fill="#ffc9c9"></path><path d="M14.24 0 C155.55 1.13, 296.62 -0.15, 483 0 M483 0 C493.92 -1.52, 496.05 5.08, 497.24 14.24 M497.24 14.24 C497.38 23.48, 498.47 33.15, 497.24 42.71 M497.24 42.71 C497.09 53.62, 493.77 58.68, 483 56.95 M483 56.95 C298.38 57.41, 112.87 56.33, 14.24 56.95 M14.24 56.95 C4.27 55.03, -1.16 51.53, 0 42.71 M0 42.71 C0.52 31.65, -0.99 21.41, 0 14.24 M0 14.24 C1.33 5.03, 4.07 -1.93, 14.24 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(204.59837922595784 189.72885688902835) rotate(0 148.54991149902344 12.5)"><text x="148.54991149902344" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">generated Eager Style Op API</text></g></svg>
@@ -0,0 +1,9 @@
1+<?xml version="1.0" standalone="no"?>
2+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 998.8333740234375 1073.9583282470703" width="998.8333740234375" height="1073.9583282470703"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
4+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAASYABEAAAAADQgAAARAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAANAgKCY4uERAKgxSCYAsGAAE2AiQDCAQgBYJeByAMFBuhC8iO0UvPO0mZYoRJipmLh//fr98+935RaTPv6+ouDbFQJyJWWVNJVDy0gZToHgrJ3lBeNrNZO8WkILNbanNetmkPYnowcs6JP+NFvir//+c0sje/ZCscsHH9PXklY2tMfhElwVgBCoXCbErtzEYPWBO5KT3pF+s2qldpsPJPU6ALKNpJGAcdpn4TuGevbARiTVCWAAOn53w/lgMBSULUEnsDpIR4WQohyOECRLXZdHa9pAUU1B/gJ8VG9tWAXAPLh/DhtnfPAEjNvF7MESAhYwgmEhvfHJoMMak/6OtjrbGrQ0s0G8I/sgEUpxyQXzmOQ7iU4mDfPA6Q0+fI5XuDYjmwQMhGkywcEsvhFRxYIWI5WIHsLBZqr3cEU4iZY449DLKjNqeH5YcmovVeXoaKR6yG6zRiNV4n2C0Kd7Z5KSorlsPfgvHXMDeQHbUvZu2CFHpGvJWgqEBsDqt11DnYmSTObpEUThDIxl6tdbBXSZygqFiO8JIi6U6jzdeFqCGskLJ4g0IDE6RDMUylHkzAdQyDM4uUdSQXgJoKWpzZK7FQGwdn1raPZgYTOLpIMBFMUDhBkbEcSVHR4LCRQqUCFqSfGx+ITWJOBjmTRV4hkZV0lQI1NLLaojUUcEI9/1vem9cR9JwBRmaIvEkim+kWBVbgslWvfoD3JwRwgUAsMPKERA6iBysIQagcotcwwIcTIrhIRLHIyEdL5Bh6rII4xMtxek0AwYlXBUDWJhkDyz6QQeJWmiRe4D2gKZVcvDcgObKDMTafh3CTrGkNmKlff/sM7PdY39y2NmaFP5N1RtK640oKw4Pev+9ca9waLc1hawMPb2qRnoHr8HBZ0LrRdZ2hW+zpDF3D/KajufFWZyrFSzUs3hw5d+FavRUfMWp6Ft04Xc003KfBTP3jxjtPykb9d8anzY/jPaLZJanOEPFa/5FNbVKhcd3GjNHRvD0d2HbVhqNK/eEtLMKueaPi84Rt1aGKW69U2l5DW8Hvc2ww1v8AjNo4trK+A8JWujFEsDJyWEhA5ydT5v3Eazkdm0wrJw0kBlsbnIc3mVf90W1uhczKF+8/ZW4aXXU02qYzrfxotmWQSYfLVBfOn9OlH4wlmqTD0m2uOv6wiCFbxHGfNcsfE+PKVvb/fX1Pnop0SzfVDVbl/BfLsE8AX17/CAGAr9XQleW3vsim7jwKAG0SCH5L9abfA9beb4cFN4UW5V/y2WJKX4VjFpV1mXZPa3UTJpokgIqXhScMue1JejQ82TJmZ9Owp9l92kKL+TrgOprTCEM50RoUa+Y12hi0EYZDksVJlCgbycvNaxgXnEdSxLB2koRAhSX79Pmxio2GBWeGEW0kcYNKQtBOktYooORkKWK50MZeooT4wbJ4oR62W42buO/oZYI7RhhpUiCtVZuxOw9cVBOp5FCiBcZNVNYkGDRARDVAAPSQNkEV); }
5+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
6+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,d09GMgABAAAAAAW0ABEAAAAADpQAAAVaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbHhweBmAAPAgKCY4uERAKhhSFAgsIAAE2AiQDCgQgBYJeByAMFBvNDMiO0UvPeQHhlCnaFDMTD+Ra/kuydyUCoeuYZRW5KlFjKtyOL41H/1GTvp9/z/pza6V1Ug/gtCNVGbldq919TBdG9zFP0B+A+v+t/TbO/V43xK9YIjSGsw8rlVJ2Pvq+aBNP0xAPSUOBFInWtyHJLHoqxM7WjtXaWDCqz8r520dANdSjoCbV36dSNzO05O8IgEAGpRIQS1N6He0E7iq2KmRv0uNzKA4CEAMPUvAAY8rd0cpBcxjq9/7fpGMvTt+AdAM7LzjoxGfvgVhg/Y9+3MuZJG6O0yE1OcZRrARxcfIa03zlQ4p/C4FXK2iW32UOML3MgGQjchOh7RSD0rfmQPY8ABLpfCSHATSN474omUJjOQywphlAk0QOA+xp3J9iu/x9EQeF0zjdOkXjfnxufCrFcXHVea5pmsrDU9B/EMVTEDggUvWUyd0yTVGVOQxwtvBy5mm57sdji70xJS38LycH7nQ7nLLdPZHeSCpOmlL1JGUiCNyXerwnEmrSRFDUhDzvkiqtb4jqrwt+kTcpZQQbcL+ipBpF07WCg8AamjbRDqp+KINA9teXGZi9nO3yMSje0z0fR8oknDgIB0GZCIrMYUA43d4f8ZE1W1Zg0edODAK/QBJD4hWPvtQgy+hyCwooPYqgStRLMFz8b8F7y2qCRtJC59WOPmaQ9XSDBSNMHqNbzUy2EKySDbjXNvqEQbbTHRaccHmcbnUz2UPwShnI9GaMfpZBzqbnWMhFnifXrflsaEEbQHLOjtqhUlqCGEVdS4hKdQlAqWf0P1t5I0elyuK1iTkcjp2jWEO7v9ftt46e8XyXvJf486hzb2h04dCk6Py77v3IdECsPfeMax/o70MNkckJuXjuBczHsTD84rttbwf2zzzGeAB7L9zn3Suix295L+uGOPnMO610N/DOOxV8YdZDplD2uIjSutDRwN50Hk2+4nsoYU1gB8Tj94LmTX9QtH8iMJm0vI8fFdG6ysvHLnGIDkK83ekaw6JgZuoQuWTiPmR6KXylxa+LwoGApLnHJgtwZeoEFg6dj4vviYnFmp3evAPiZM6BupooHjdPQLg1tB9hpk4RvCZN+96Sx4dUu26q8Z+ysv/Tz7PipitKOFP8ui9u6+a/e0DMfnNJee3K9dKXHjbs/lB18oVvrx3H9jDs+HcN6jeTSu4tH+hfu/vja5nTQySzoHXT5qEY8QVzTGk9MuOYafMT73fPt0z+wbuDdfxlmEQclakuyGRnli7rLmrPT1zBznz9y1eOhfcMqp+GP6u8jMM29i3P5A1d0mccw6pjwtWyp0fyTMTPp/bnAWtEJlxiy3R9vgQ4a2c4VhbfSRaYRU8967Ns/kCfWZthLr76kiHjmII7rwit2H1Jn/GIdf44e2f+/x2NBbL3nHnIWX4Uu3e2dj4abUJomHtq4IkHwmiwaKjavsQiyFj4bHu/TSG6seBMRcUVpXDJNnvDN2oBdQ07+HlMl19+RL97R1Ga2zyB2l44GN/UvVYmOnW/3Div/ZhCePp+AAhI3Rkf3VajHpVX/yaoYn8J+DrzvROAb1mu3env6Yzs33QLoFwEgX9lIftPhP7/9oDAm+YDpd9wqTSc4jcwljVJLPoiDC5zhC1kwvqkD8t40OzZeFQrjyez6O0ZHS+4o+Ji/nbgQNS4ReYbF9WvSci0pZaJWmQhXJFcBQpUIU2bNG2BCWhcsWylWig/tJH2T9fLNVkKHs+xqIor2CCbH1YLlbYYT49WLMeEqOWXSOPq/ipV7kN11oqJey5dptTwIout6Rs1a87y7ZcueiKuQ0SzMDZvstKNfK2cdyqEFRqISjAFAAA=); }
7+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
8+ @font-face { font-family: Xiaolai; src: url(data:font/woff2;base64,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); }
9+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="998.8333740234375" height="1073.9583282470703" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(259.4619271414622 118.97307695661289) rotate(0 91.5 49)"><path d="M24.5 0 C68.2 1.3, 118.4 -3.84, 158.5 0 C176.11 3.51, 181.8 7.38, 183 24.5 C183.24 42.04, 185.74 54.42, 183 73.5 C180.74 91.25, 172.97 99.33, 158.5 98 C116.63 100.95, 76.2 99.21, 24.5 98 C8.19 99.16, -2.3 86.68, 0 73.5 C0.34 54.86, -0.62 41.17, 0 24.5 C0.43 7.64, 9.02 -0.91, 24.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M24.5 0 C74.67 0.17, 123.88 0.04, 158.5 0 M24.5 0 C55.21 -1.22, 87.15 0.38, 158.5 0 M158.5 0 C173.1 -1.92, 184.95 7.14, 183 24.5 M158.5 0 C172.87 -2.12, 185.13 9.58, 183 24.5 M183 24.5 C184.64 40.43, 182.54 58.66, 183 73.5 M183 24.5 C182.57 37.81, 182.68 48.98, 183 73.5 M183 73.5 C182.84 89.96, 174.99 96.92, 158.5 98 M183 73.5 C185.11 90.39, 174.6 96.07, 158.5 98 M158.5 98 C124.39 98.51, 94 98.6, 24.5 98 M158.5 98 C129.18 98.51, 99.66 99.33, 24.5 98 M24.5 98 C8.39 98.46, -0.76 88.34, 0 73.5 M24.5 98 C7.05 99.38, 0.22 91.71, 0 73.5 M0 73.5 C0.73 60.44, -0.24 49.17, 0 24.5 M0 73.5 C0.26 55.1, 0.44 36.46, 0 24.5 M0 24.5 C-0.29 6.86, 7.66 1.42, 24.5 0 M0 24.5 C-1.63 6.56, 6.57 0.72, 24.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(91.74764142717686 141.25879124232716) rotate(0 445.71428571428555 200.71428571428575)"><path d="M32 0 C333.64 6.89, 635.98 5.82, 859.43 0 C879.37 -0.67, 889.39 9.46, 891.43 32 C887.92 109.4, 891.79 181.73, 891.43 369.43 C888.87 391.58, 877.22 399.99, 859.43 401.43 C628.77 398.89, 395.41 399.54, 32 401.43 C8.43 400.03, -2.46 388.82, 0 369.43 C3.95 238.25, -0.29 105.56, 0 32 C-1.76 7.65, 13.95 3.14, 32 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M32 0 C339.29 2.81, 644.98 2.88, 859.43 0 M32 0 C255.35 3.21, 478.83 3.56, 859.43 0 M859.43 0 C881.93 -0.3, 890.59 12.2, 891.43 32 M859.43 0 C879.44 -0.76, 890.73 11.57, 891.43 32 M891.43 32 C889.75 117.08, 889.79 201.79, 891.43 369.43 M891.43 32 C893.18 139.43, 893.47 247.46, 891.43 369.43 M891.43 369.43 C890.01 390.74, 881.76 400.45, 859.43 401.43 M891.43 369.43 C890.97 389.57, 881.88 402.94, 859.43 401.43 M859.43 401.43 C582.45 399.98, 303.59 399.84, 32 401.43 M859.43 401.43 C602.91 403.16, 346.92 403.45, 32 401.43 M32 401.43 C10.43 400.31, -1.31 392.67, 0 369.43 M32 401.43 C9.15 400.79, 1.22 391.39, 0 369.43 M0 369.43 C1.81 265.53, -0.25 161.91, 0 32 M0 369.43 C0.72 239.44, 0.83 109.9, 0 32 M0 32 C-0.06 10.28, 8.68 -0.14, 32 0 M0 32 C-1.33 12.39, 10.48 0.92, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(58.91662597656341 115.64285714285705) rotate(0 445.71428571428555 200.71428571428575)"><path d="M32 0 C234.94 0.43, 437.99 -0.44, 859.43 0 C880.62 1.31, 889.88 12.84, 891.43 32 C889.58 154.31, 887.97 273.85, 891.43 369.43 C892.35 390.5, 882 401.98, 859.43 401.43 C563.5 394.62, 266.64 396.21, 32 401.43 C9.93 398.1, -2.66 388.61, 0 369.43 C0.25 273.47, 3.72 175.48, 0 32 C-1.19 13.62, 10.79 -1.73, 32 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M32 0 C258.59 2.95, 486.87 3.56, 859.43 0 M32 0 C201.56 2.15, 371.5 2.18, 859.43 0 M859.43 0 C882.51 1.17, 891.24 12.31, 891.43 32 M859.43 0 C880.5 -0.81, 892.29 11.22, 891.43 32 M891.43 32 C891.8 142.86, 892.42 250.51, 891.43 369.43 M891.43 32 C893.84 142.73, 893.63 253.61, 891.43 369.43 M891.43 369.43 C892.77 389.81, 881.27 402.8, 859.43 401.43 M891.43 369.43 C890.85 389.61, 880.6 402.6, 859.43 401.43 M859.43 401.43 C657.39 400.16, 454.18 399.25, 32 401.43 M859.43 401.43 C608.9 400.04, 358.14 399.85, 32 401.43 M32 401.43 C10.17 400.8, -0.28 390.68, 0 369.43 M32 401.43 C12.06 399.96, 1.97 391.85, 0 369.43 M0 369.43 C0.55 239.74, 1.42 107.25, 0 32 M0 369.43 C1.47 299.98, 1.74 231.42, 0 32 M0 32 C-1.68 11.37, 12.26 -0.79, 32 0 M0 32 C-0.27 10.91, 8.83 0.26, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(31.773768833704708 95.35714285714283) rotate(0 445.71428571428555 200.71428571428575)"><path d="M32 0 C334.23 -1.68, 636.89 -1.95, 859.43 0 C882.53 -0.78, 889.3 8.64, 891.43 32 C892.51 161.12, 890.37 286.76, 891.43 369.43 C888.07 392.09, 881.32 399.92, 859.43 401.43 C652.3 397.66, 448.79 399.33, 32 401.43 C7.47 398.96, -3.08 392.61, 0 369.43 C0.89 268.47, -1.34 166.65, 0 32 C-0.23 9.02, 10.21 0.17, 32 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M32 0 C215.32 -1.35, 398.33 -2.15, 859.43 0 M32 0 C257.63 -2.85, 483.06 -3, 859.43 0 M859.43 0 C879.75 -0.3, 890.03 10.07, 891.43 32 M859.43 0 C881.03 0.76, 889.19 9.75, 891.43 32 M891.43 32 C890.46 115.83, 892.18 200, 891.43 369.43 M891.43 32 C890.37 157.22, 889.89 281.46, 891.43 369.43 M891.43 369.43 C891.35 390.58, 881.52 402.09, 859.43 401.43 M891.43 369.43 C891.48 392.47, 882.81 400.7, 859.43 401.43 M859.43 401.43 C618.89 399.21, 377.66 400.1, 32 401.43 M859.43 401.43 C601.87 405.1, 343.87 404.54, 32 401.43 M32 401.43 C10.82 401.29, -0.51 392.59, 0 369.43 M32 401.43 C8.81 401.3, 0.45 392.87, 0 369.43 M0 369.43 C0.76 234.99, 1.38 100.96, 0 32 M0 369.43 C1.53 290.71, 1.54 213.47, 0 32 M0 32 C-1.62 8.79, 10.62 -1.84, 32 0 M0 32 C-0.6 11.32, 10.31 -1, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(10 554.7917022705078) rotate(0 489.41668701171875 254.58331298828125)"><path d="M32 0 C340.75 -3.61, 649.84 -4, 946.83 0 M32 0 C302.52 2.86, 572.67 3.23, 946.83 0 M946.83 0 C968.27 0.92, 979.09 10.77, 978.83 32 M946.83 0 C967.63 -1.5, 978.97 11.09, 978.83 32 M978.83 32 C977.29 144.48, 977.17 255.88, 978.83 477.17 M978.83 32 C978.86 183.89, 978.42 334.69, 978.83 477.17 M978.83 477.17 C976.9 500.28, 968.31 510.2, 946.83 509.17 M978.83 477.17 C979.49 498.7, 970.04 509.43, 946.83 509.17 M946.83 509.17 C645.66 505.14, 343.24 505.09, 32 509.17 M946.83 509.17 C661.11 511.47, 375.1 511.22, 32 509.17 M32 509.17 C9.61 507.83, 1.53 499.73, 0 477.17 M32 509.17 C12.81 511.23, -0.29 497.7, 0 477.17 M0 477.17 C-1.8 387.28, -2.67 295.59, 0 32 M0 477.17 C0.06 386.59, -0.08 294.7, 0 32 M0 32 C1.21 9.45, 11.42 -0.04, 32 0 M0 32 C0.93 12.63, 10.69 1.8, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(568.6785103934153 575.6607905796595) rotate(0 64.86666870117188 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">GE图编译子包</text></g><g stroke-linecap="round" transform="translate(36.15471104213157 971.1428571428573) rotate(0 270.3333435058594 25)"><path d="M12.5 0 C200.14 1.99, 388.19 1.02, 528.17 0 M12.5 0 C134.88 -0.94, 257.88 -0.87, 528.17 0 M528.17 0 C538.33 0.98, 541.48 5.28, 540.67 12.5 M528.17 0 C535.01 2.25, 541.31 3.32, 540.67 12.5 M540.67 12.5 C538.86 19.08, 539.84 30.03, 540.67 37.5 M540.67 12.5 C541.39 22.05, 541 29.96, 540.67 37.5 M540.67 37.5 C540.72 45.3, 536.25 51.16, 528.17 50 M540.67 37.5 C541.33 44.96, 538.22 51.11, 528.17 50 M528.17 50 C411.02 51.51, 293.97 51.7, 12.5 50 M528.17 50 C352.91 49.81, 176.94 50.11, 12.5 50 M12.5 50 C4.64 49.04, 1.48 44.71, 0 37.5 M12.5 50 C3.46 51.95, 1.84 46.65, 0 37.5 M0 37.5 C-0.7 30.18, 0.34 27.7, 0 12.5 M0 37.5 C-0.61 32.62, 0.72 27.08, 0 12.5 M0 12.5 C1.36 5.27, 4.36 -0.09, 12.5 0 M0 12.5 C-0.65 4.18, 3.58 1.19, 12.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(239.67138889857688 986.1428571428573) rotate(0 66.81666564941406 10)"><text x="66.81666564941406" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">graph_base_impl*</text></g><g stroke-linecap="round" transform="translate(18.9166259765625 935.4285714285713) rotate(0 285.5 49.857142857142776)"><path d="M24.93 0 C192.81 0.21, 361.14 1.22, 546.07 0 M24.93 0 C155.17 -0.11, 286.17 -0.36, 546.07 0 M546.07 0 C562.79 -0.78, 570.53 7.6, 571 24.93 M546.07 0 C561.71 -0.34, 572.22 9.96, 571 24.93 M571 24.93 C570.32 37.38, 571.33 47.08, 571 74.79 M571 24.93 C571.2 41.84, 570.54 60.28, 571 74.79 M571 74.79 C569.98 89.45, 564.31 101.58, 546.07 99.71 M571 74.79 C570.9 91.37, 560.65 99.91, 546.07 99.71 M546.07 99.71 C406.68 99.4, 268.5 99.74, 24.93 99.71 M546.07 99.71 C423.57 97.68, 300.12 97.47, 24.93 99.71 M24.93 99.71 C7.52 99.43, -1.42 89.76, 0 74.79 M24.93 99.71 C6.26 98.68, -0.88 92.68, 0 74.79 M0 74.79 C-1.57 62.19, -1.41 51.5, 0 24.93 M0 74.79 C-0.37 56.17, -0.77 37.06, 0 24.93 M0 24.93 C0.19 9.38, 7.08 -1.02, 24.93 0 M0 24.93 C0.28 9.28, 6.99 -0.25, 24.93 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(540.9166259765625 11) rotate(0 100.5 30)"><path d="M15 0 C56.77 1.38, 102.03 1.49, 186 0 M15 0 C80.61 -1.1, 147.85 -0.8, 186 0 M186 0 C195.62 -1.71, 200.1 3.88, 201 15 M186 0 C194.94 0.26, 201.3 4.63, 201 15 M201 15 C199.24 24.13, 201.96 38.26, 201 45 M201 15 C201.34 23.95, 200.86 32.8, 201 45 M201 45 C199.04 55.4, 195.63 60.7, 186 60 M201 45 C199.86 57.04, 195.51 58.19, 186 60 M186 60 C128.47 57.87, 70.68 57.12, 15 60 M186 60 C146.86 59.76, 109.2 58.06, 15 60 M15 60 C4.23 59.44, 1.59 53.75, 0 45 M15 60 C3.69 62.01, -0.97 54.63, 0 45 M0 45 C-0.58 37.31, -1.35 29.7, 0 15 M0 45 C0.43 36.88, -0.39 30.2, 0 15 M0 15 C-1.52 5.37, 6.65 1.55, 15 0 M0 15 C1.53 3.35, 3.22 -0.02, 15 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(621.4166259765625 28.5) rotate(0 20 12.5)"><text x="20" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">已有</text></g><g stroke-linecap="round" transform="translate(780.4166259765625 10) rotate(0 100.5 30)"><path d="M15 0 C52.23 -0.29, 88.34 -0.17, 186 0 C196.98 -3.18, 200.66 7.49, 201 15 C198.1 21.01, 201.05 32.69, 201 45 C201.66 56.88, 193.91 61.14, 186 60 C140.73 58.95, 98.08 58.38, 15 60 C4.33 57.67, 0.8 58.58, 0 45 C3.2 37.28, -3.08 31.73, 0 15 C-3.12 7.5, 1.86 2.62, 15 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M15 0 C72.32 -0.07, 126.61 -0.89, 186 0 M15 0 C53.72 -0.71, 93.84 0.02, 186 0 M186 0 C197.33 -1.75, 200.49 6.92, 201 15 M186 0 C194.39 -2.23, 201.38 6.66, 201 15 M201 15 C199.53 27.06, 201.58 38.36, 201 45 M201 15 C201.71 25.46, 200.41 37.62, 201 45 M201 45 C202.25 54.69, 197.61 59.52, 186 60 M201 45 C200.48 53.45, 197.32 59.49, 186 60 M186 60 C120.01 59.5, 53.45 57.84, 15 60 M186 60 C134.17 57.89, 82.83 58.78, 15 60 M15 60 C5.39 60.6, -1.59 53.51, 0 45 M15 60 C6.92 57.91, -1.41 55.89, 0 45 M0 45 C-1.11 38.12, 1.76 26.75, 0 15 M0 45 C-0.44 34.84, -0.09 23.37, 0 15 M0 15 C1.32 4.84, 6.54 1.52, 15 0 M0 15 C-1.8 6.64, 4.02 0.34, 15 0" stroke="#2f9e44" stroke-width="2" fill="none"></path></g><g transform="translate(860.9166259765625 27.5) rotate(0 20 12.5)"><text x="20" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#2f9e44" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">新增</text></g><g stroke-linecap="round" transform="translate(551.2855922154013 380.00592694963746) rotate(0 112.34525844028985 30.654741559709862)"><path d="M15.33 0 C67.32 -1.13, 120.45 1.67, 209.36 0 M15.33 0 C64.6 -1.08, 113.42 -1.82, 209.36 0 M209.36 0 C218.8 -1.66, 224.29 3.17, 224.69 15.33 M209.36 0 C218.12 -1.6, 226.67 4.18, 224.69 15.33 M224.69 15.33 C226.21 24.39, 223.44 30.36, 224.69 45.98 M224.69 15.33 C223.64 20.89, 225.19 28.6, 224.69 45.98 M224.69 45.98 C224.77 56.82, 217.76 61.53, 209.36 61.31 M224.69 45.98 C223.99 57.13, 219.92 63.08, 209.36 61.31 M209.36 61.31 C166.11 61.01, 121.36 62.6, 15.33 61.31 M209.36 61.31 C163.74 61.68, 118.01 61.25, 15.33 61.31 M15.33 61.31 C6.43 61.05, 1.92 55.4, 0 45.98 M15.33 61.31 C4.31 59.34, -1.2 57.04, 0 45.98 M0 45.98 C1.59 36.41, -0.81 29.64, 0 15.33 M0 45.98 C1.19 34.66, 1.12 20.97, 0 15.33 M0 15.33 C-0.37 4.13, 6.9 -0.04, 15.33 0 M0 15.33 C-1.3 5.74, 3.5 1.93, 15.33 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(87.19998168945312 225.97307695661289) rotate(0 84.26194545200894 55)"><path d="M27.5 0 C62.89 4.44, 90.2 4.98, 141.02 0 C160.82 -3.05, 170.88 6.23, 168.52 27.5 C170.03 44.92, 165.7 71.96, 168.52 82.5 C165.24 102.64, 158.86 109.85, 141.02 110 C105.6 109.77, 67.64 108.95, 27.5 110 C11.14 106.51, -1.02 103.73, 0 82.5 C-2.29 66.97, 0.79 49.05, 0 27.5 C0.47 8.67, 9.53 2.08, 27.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M27.5 0 C69.07 1.19, 108.4 1.3, 141.02 0 M27.5 0 C55.43 1.41, 81.71 1.4, 141.02 0 M141.02 0 C160.36 -0.56, 169.2 10, 168.52 27.5 M141.02 0 C159.74 -2.21, 166.36 10.38, 168.52 27.5 M168.52 27.5 C169.45 39.51, 170.05 53.45, 168.52 82.5 M168.52 27.5 C167.6 45.26, 168.65 64.97, 168.52 82.5 M168.52 82.5 C169.07 99.7, 159.44 109.04, 141.02 110 M168.52 82.5 C166.54 101.63, 160.33 108.32, 141.02 110 M141.02 110 C97.31 109.84, 52.7 112.21, 27.5 110 M141.02 110 C112.66 109.65, 85.39 109.87, 27.5 110 M27.5 110 C9.11 111.06, -0.33 101.16, 0 82.5 M27.5 110 C7.81 107.79, -0.83 98.84, 0 82.5 M0 82.5 C-1.35 70.51, 1.5 54.53, 0 27.5 M0 82.5 C0.07 60.29, 1.17 38.75, 0 27.5 M0 27.5 C-0.56 7.77, 8.96 0.33, 27.5 0 M0 27.5 C-1.56 8.82, 9.83 0.43, 27.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(120.66192790440164 250.97307695661289) rotate(0 50.79999923706055 30)"><text x="50.79999923706055" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libesb_xx.a</text><text x="50.79999923706055" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="50.79999923706055" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">xx_esb_impl*</text></g><g stroke-linecap="round" transform="translate(85.36896623883877 348.42857142857144) rotate(0 182.8333740234375 55)"><path d="M27.5 0 C121.13 -0.26, 210.93 -0.57, 338.17 0 C358.04 1.83, 366.87 7.74, 365.67 27.5 C367.38 49.81, 364.33 70.74, 365.67 82.5 C365.56 103.9, 359.22 110.53, 338.17 110 C220.87 115.11, 104.64 111.49, 27.5 110 C7.86 107.08, 2.27 103.45, 0 82.5 C3.45 66.67, -2.58 49.22, 0 27.5 C-0.96 7.32, 12.52 0.37, 27.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M27.5 0 C103.6 1.69, 179.34 0.49, 338.17 0 M27.5 0 C97.48 -1.57, 168.5 -1.01, 338.17 0 M338.17 0 C356.03 0.56, 364.13 10.63, 365.67 27.5 M338.17 0 C356.71 0.64, 366.31 9.71, 365.67 27.5 M365.67 27.5 C367.42 38.47, 366.11 49.98, 365.67 82.5 M365.67 27.5 C364.66 39.15, 366.03 52.27, 365.67 82.5 M365.67 82.5 C365.06 99.96, 355.91 111.26, 338.17 110 M365.67 82.5 C367.79 102.93, 355.82 110.82, 338.17 110 M338.17 110 C230.1 111.47, 123.82 111.09, 27.5 110 M338.17 110 C213.29 108.05, 89.33 108, 27.5 110 M27.5 110 C10.61 111.44, 0.88 102.05, 0 82.5 M27.5 110 C11.14 108.11, 2.23 101.47, 0 82.5 M0 82.5 C-1.59 67.98, 0.36 54.62, 0 27.5 M0 82.5 C-0.63 65.7, 0.89 48.88, 0 27.5 M0 27.5 C0.29 11.02, 9.66 0.02, 27.5 0 M0 27.5 C-0.84 8.39, 7.21 -0.18, 27.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(202.45234026227627 365.92857142857144) rotate(0 65.75 37.5)"><text x="65.75" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">对外头文件</text><text x="65.75" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">xx_esb_c.h</text><text x="65.75" y="67.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">xx_esb_cpp.h</text></g><g transform="translate(570.4880545479905 288.21428571428567) rotate(0 80 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">当前版本算子原型</text></g><g transform="translate(571.4880545479905 403.0000000000001) rotate(0 93.44999694824219 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">lib_xx_opsproto.so</text></g><g transform="translate(518.53577532087 100.47024318150113) rotate(0 51.81666564941406 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">算子xx子包</text></g><g stroke-linecap="round" transform="translate(550.3451974051331 314.92857142857144) rotate(0 107.85714285714312 27.14285714285711)"><path d="M13.57 0 C76.39 -1.67, 140.08 1.93, 202.14 0 C210.05 -1.03, 216.65 4.29, 215.71 13.57 C217.72 24.57, 214.96 35.85, 215.71 40.71 C218.33 50.61, 209.38 52.54, 202.14 54.29 C157.99 53.27, 114.88 54.84, 13.57 54.29 C7.86 51.25, 1.03 48.02, 0 40.71 C0.65 36.41, -2.62 26.63, 0 13.57 C3.18 7.96, 4.77 -2.81, 13.57 0" stroke="none" stroke-width="0" fill="#ffffff"></path><path d="M13.57 0 C83.04 0.58, 152.9 -2.04, 202.14 0 M13.57 0 C84.19 0.25, 155.46 -0.53, 202.14 0 M202.14 0 C209.34 1.93, 215.77 6, 215.71 13.57 M202.14 0 C212.66 1.27, 215.54 2.7, 215.71 13.57 M215.71 13.57 C216.09 23.77, 215.89 28.79, 215.71 40.71 M215.71 13.57 C215.14 22, 216.61 30.61, 215.71 40.71 M215.71 40.71 C214.05 48.03, 209.59 53.24, 202.14 54.29 M215.71 40.71 C217.7 47.6, 209.94 54.38, 202.14 54.29 M202.14 54.29 C137.76 51.65, 72.99 55.17, 13.57 54.29 M202.14 54.29 C135.79 55.09, 69.49 56.32, 13.57 54.29 M13.57 54.29 C4.02 56.13, -0.21 48.52, 0 40.71 M13.57 54.29 C2.29 53, 0.88 48.51, 0 40.71 M0 40.71 C-1.52 32.39, -0.32 28.89, 0 13.57 M0 40.71 C-0.9 31.05, 0.38 22.53, 0 13.57 M0 13.57 C-0.66 5.31, 5.14 1.38, 13.57 0 M0 13.57 C-0.27 5.42, 5.07 -0.24, 13.57 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(614.4773417881552 329.57142857142856) rotate(0 43.724998474121094 12.5)"><text x="43.724998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">xx_ops.h</text></g><g stroke-linecap="round" transform="translate(527.4880545479909 267.78571428571433) rotate(0 131.42857142857133 94.28571428571422)"><path d="M32 0 C105.16 -0.47, 178.51 -0.56, 230.86 0 M32 0 C84.52 1.96, 134.42 1.32, 230.86 0 M230.86 0 C251.22 -0.59, 262.4 10.11, 262.86 32 M230.86 0 C252.53 1.95, 261.11 11.06, 262.86 32 M262.86 32 C262.48 80.09, 262.73 127.32, 262.86 156.57 M262.86 32 C262.71 77.02, 262.57 122.82, 262.86 156.57 M262.86 156.57 C262.54 179.65, 251.02 190.33, 230.86 188.57 M262.86 156.57 C265.11 176.18, 253.91 189.93, 230.86 188.57 M230.86 188.57 C169.52 190.35, 106.49 191.77, 32 188.57 M230.86 188.57 C176.18 187.06, 121.87 187.76, 32 188.57 M32 188.57 C9.18 188.99, 1.88 177.86, 0 156.57 M32 188.57 C9.86 186.83, -0.28 177.85, 0 156.57 M0 156.57 C-1.59 115.15, 0.78 73.21, 0 32 M0 156.57 C1.99 113.58, 0.81 71.77, 0 32 M0 32 C1.84 12.3, 9.54 -1.6, 32 0 M0 32 C-1.39 9.25, 8.89 -1.09, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(271.79753766740964 225.6428571428571) rotate(0 84.26194545200894 55)"><path d="M27.5 0 C64.51 4.52, 95.34 4.54, 141.02 0 C157.02 -0.92, 167.54 9.31, 168.52 27.5 C172.11 42.58, 170.42 56.41, 168.52 82.5 C167.27 102.28, 157.83 107.7, 141.02 110 C105.5 107.83, 69.59 105.64, 27.5 110 C7.41 108.38, 3.14 100.71, 0 82.5 C-2.43 71.42, -2 60.76, 0 27.5 C-0.57 12.18, 11.94 -0.5, 27.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M27.5 0 C49.73 0.87, 73.4 -1.68, 141.02 0 M27.5 0 C51.9 1.6, 75.59 1.42, 141.02 0 M141.02 0 C158.01 -0.56, 168.06 9.11, 168.52 27.5 M141.02 0 C159 -0.77, 167.81 10.02, 168.52 27.5 M168.52 27.5 C169.61 47.67, 167.69 65.61, 168.52 82.5 M168.52 27.5 C167.89 40.95, 169.12 55.15, 168.52 82.5 M168.52 82.5 C170.19 102.43, 161.01 110.23, 141.02 110 M168.52 82.5 C167.8 99.26, 159.25 108.06, 141.02 110 M141.02 110 C111.87 111.89, 80.07 109.32, 27.5 110 M141.02 110 C98 111.05, 54.88 110.94, 27.5 110 M27.5 110 C8.49 109.31, -0.98 99.03, 0 82.5 M27.5 110 C9.86 108.22, -0.37 102.29, 0 82.5 M0 82.5 C-0.52 60.96, -0.26 38.76, 0 27.5 M0 82.5 C-0.97 62.15, -0.69 40.7, 0 27.5 M0 27.5 C-1.92 8.73, 8.75 -1.17, 27.5 0 M0 27.5 C1.58 7.1, 10.65 2.15, 27.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(305.2594838823579 250.6428571428571) rotate(0 50.79999923706055 30)"><text x="50.79999923706055" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libesb_xx.so</text><text x="50.79999923706055" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="50.79999923706055" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">xx_esb_impl*</text></g><g stroke-linecap="round" transform="translate(116.05948311941916 273.4999999999999) rotate(0 55.71428571428578 24.285714285714334)"><path d="M12.14 0 C37.08 -1.2, 67.44 -2.44, 99.29 0 M12.14 0 C29.72 0.56, 47.55 0.69, 99.29 0 M99.29 0 C108.77 -1.14, 112.02 3.81, 111.43 12.14 M99.29 0 C106.96 2.28, 111.27 5.33, 111.43 12.14 M111.43 12.14 C112.61 20.08, 109.4 30.07, 111.43 36.43 M111.43 12.14 C111.45 20.98, 112.25 28.76, 111.43 36.43 M111.43 36.43 C109.71 45.92, 106.93 50.41, 99.29 48.57 M111.43 36.43 C111.5 46.13, 107.17 49.94, 99.29 48.57 M99.29 48.57 C67.26 50.11, 38.68 48.09, 12.14 48.57 M99.29 48.57 C80.66 47.44, 64.35 48.36, 12.14 48.57 M12.14 48.57 C5.44 47.06, 1.41 44.35, 0 36.43 M12.14 48.57 C3.7 48.37, -1.62 45.1, 0 36.43 M0 36.43 C-1.53 30.95, 1.54 21.22, 0 12.14 M0 36.43 C0.95 30.04, 0.27 25.01, 0 12.14 M0 12.14 C-1.53 5.01, 2.73 0.2, 12.14 0 M0 12.14 C-1.83 6.2, 4.06 -2.1, 12.14 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(294.6309116908476 273.5000000000001) rotate(0 55.71428571428589 24.285714285714334)"><path d="M12.14 0 C45.38 1.04, 77.16 1.07, 99.29 0 M12.14 0 C38.56 -0.7, 63.71 -0.62, 99.29 0 M99.29 0 C109.17 -1.26, 109.59 4.29, 111.43 12.14 M99.29 0 C107.51 -1.97, 112.79 3.79, 111.43 12.14 M111.43 12.14 C110.82 20.41, 111.2 25.04, 111.43 36.43 M111.43 12.14 C111.08 20.7, 112.32 29.75, 111.43 36.43 M111.43 36.43 C110.48 45.96, 108.39 47.23, 99.29 48.57 M111.43 36.43 C110.58 43.06, 107.17 50.08, 99.29 48.57 M99.29 48.57 C81.2 47.59, 62.49 49.58, 12.14 48.57 M99.29 48.57 C70.2 48.93, 39.5 47.97, 12.14 48.57 M12.14 48.57 C2.84 48.02, 1.2 45.35, 0 36.43 M12.14 48.57 C4.26 46.5, -0.08 46, 0 36.43 M0 36.43 C-0.38 25.56, 0.03 20.36, 0 12.14 M0 36.43 C-0.66 31.22, -0.45 27.09, 0 12.14 M0 12.14 C1.4 2.09, 3.27 1.37, 12.14 0 M0 12.14 C0.06 5.33, 6.23 0.42, 12.14 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(265.7737688337054 639.0714285714286) rotate(0 123.00000000000011 47.85714285714283)"><path d="M23.93 0 C105.21 0.35, 183.91 1.19, 222.07 0 C234.97 1.15, 248.92 10.22, 246 23.93 C243.35 37.03, 247.61 43.77, 246 71.79 C248.22 85.54, 236.23 96.94, 222.07 95.71 C173.16 95.38, 125.55 93.34, 23.93 95.71 C6.1 98.82, -1.7 87.53, 0 71.79 C0.17 58.97, 0 46.51, 0 23.93 C-0.1 9.24, 6.83 1.7, 23.93 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M23.93 0 C96.96 1.73, 169.95 0.65, 222.07 0 M23.93 0 C66.65 0.76, 108.8 -0.2, 222.07 0 M222.07 0 C236.62 1.3, 245.06 6.16, 246 23.93 M222.07 0 C239.31 0.9, 243.83 6.46, 246 23.93 M246 23.93 C247.23 40.11, 244.83 52.72, 246 71.79 M246 23.93 C246.53 33.68, 246.7 44.31, 246 71.79 M246 71.79 C246.68 87.31, 239.82 93.87, 222.07 95.71 M246 71.79 C245.3 88.14, 239.72 93.81, 222.07 95.71 M222.07 95.71 C174.09 97.88, 125.34 94.62, 23.93 95.71 M222.07 95.71 C180.7 96.9, 141.51 96.33, 23.93 95.71 M23.93 95.71 C7.11 94.99, 0.13 86.05, 0 71.79 M23.93 95.71 C6.37 95.5, 0.69 88, 0 71.79 M0 71.79 C-1.15 61.54, 0.29 47.44, 0 23.93 M0 71.79 C-0.02 58.59, -0.87 45.05, 0 23.93 M0 23.93 C1.92 9.24, 9.76 0.74, 23.93 0 M0 23.93 C0.85 6.87, 8.13 0.67, 23.93 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(310.0594831194196 638.0714285714286) rotate(0 64.09999847412098 10)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">py_esb_base.whl</text></g><g stroke-linecap="round" transform="translate(259.91662597656295 748.9285714285714) rotate(0 116.35714285714289 34.64285714285705)"><path d="M17.32 0 C57.34 6.04, 103.23 5.12, 215.39 0 C228.56 -1.27, 231.28 8.69, 232.71 17.32 C236.27 31.18, 231.16 42.29, 232.71 51.96 C233.13 65.38, 228.21 69.06, 215.39 69.29 C171.45 71.11, 126.17 73.74, 17.32 69.29 C8.07 65.85, 0.26 61.38, 0 51.96 C1.36 45.99, 0.86 40.74, 0 17.32 C-2.17 4.5, 2.56 -1.98, 17.32 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M17.32 0 C69.63 0.19, 119.94 0.84, 215.39 0 M17.32 0 C66.59 -1.22, 113.9 -2.09, 215.39 0 M215.39 0 C227.01 -1.14, 233.93 4.79, 232.71 17.32 M215.39 0 C228.98 0.93, 232.99 7.39, 232.71 17.32 M232.71 17.32 C233.98 24, 233.23 32.57, 232.71 51.96 M232.71 17.32 C231.94 26.12, 232.68 33.62, 232.71 51.96 M232.71 51.96 C232.16 61.63, 225.03 68.67, 215.39 69.29 M232.71 51.96 C234.32 61.27, 224.72 67.4, 215.39 69.29 M215.39 69.29 C173.19 68.8, 135.53 68.32, 17.32 69.29 M215.39 69.29 C156.36 68.85, 96.76 68.04, 17.32 69.29 M17.32 69.29 C7.12 70.37, -0.51 61.69, 0 51.96 M17.32 69.29 C6 67.98, 1.94 63.73, 0 51.96 M0 51.96 C-0.6 42.38, 1.37 34.85, 0 17.32 M0 51.96 C0.87 40.56, -0.42 28.97, 0 17.32 M0 17.32 C1.96 4.38, 6.67 -0.04, 17.32 0 M0 17.32 C-0.68 3.61, 4.05 -1.61, 17.32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(21.797537667410552 830.6428571428573) rotate(0 277.61908830915183 35)"><path d="M17.5 0 C140.2 -0.84, 263.33 -1.01, 537.74 0 C547.09 -1.47, 556.12 5.73, 555.24 17.5 C556.03 32.99, 554.89 44.64, 555.24 52.5 C557.64 66.08, 546.53 70.84, 537.74 70 C331.92 71.86, 130 72.33, 17.5 70 C6.92 73.33, -2.07 66.47, 0 52.5 C2.74 46.41, -0.91 39.47, 0 17.5 C1.63 7.83, 4.22 0.02, 17.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M17.5 0 C200.04 0.21, 383.58 1.21, 537.74 0 M17.5 0 C130.44 0.67, 242.9 0.48, 537.74 0 M537.74 0 C550.04 0.57, 554.69 5.24, 555.24 17.5 M537.74 0 C551.62 -1.12, 555.16 5.58, 555.24 17.5 M555.24 17.5 C556.27 25.25, 556.2 34.6, 555.24 52.5 M555.24 17.5 C556.41 26.09, 555.79 31.81, 555.24 52.5 M555.24 52.5 C554.38 65.21, 547.44 71.59, 537.74 70 M555.24 52.5 C553.69 64.7, 551.33 69.37, 537.74 70 M537.74 70 C370.58 69.55, 203.99 69.62, 17.5 70 M537.74 70 C400.13 67.69, 262.43 68.17, 17.5 70 M17.5 70 C5.94 71.8, -1.86 63.99, 0 52.5 M17.5 70 C4.67 67.84, -0.23 63.25, 0 52.5 M0 52.5 C0.3 43.2, 1.44 33.81, 0 17.5 M0 52.5 C0.23 40.63, -0.82 27.67, 0 17.5 M0 17.5 C-0.75 6.47, 7.23 0.45, 17.5 0 M0 17.5 C1.19 7.33, 7.5 -0.25, 17.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(82.60829162597634 835.6428571428573) rotate(0 216.80833435058605 30)"><text x="216.80833435058594" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">对外头文件</text><text x="216.80833435058594" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb_graph_builder.h esb_c_funcs.h esb_tensor_holder.h</text><text x="216.80833435058594" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text></g><g transform="translate(178.46192714146218 946.9730769566129) rotate(0 79.28333282470703 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libgraph_base.so</text></g><g stroke-linecap="round" transform="translate(270.4619271414622 115.97307695661289) rotate(0 86 53.5)"><path d="M26.75 0 C56.06 -5.17, 84.35 -1.96, 145.25 0 C160.52 3.5, 171.03 7.8, 172 26.75 C168.84 42.14, 175.28 53.58, 172 80.25 C169.95 95.71, 165.1 108.77, 145.25 107 C101.53 105.38, 55.01 104.14, 26.75 107 C9.64 104.53, -3.49 99.72, 0 80.25 C-0.58 61.08, -4.16 51.03, 0 26.75 C-3.1 8.54, 9.57 -2.06, 26.75 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M26.75 0 C55.54 1.23, 85.22 0.66, 145.25 0 M26.75 0 C63.1 -0.65, 97.92 0.31, 145.25 0 M145.25 0 C161.11 -1.48, 171.71 7.59, 172 26.75 M145.25 0 C162.13 0.11, 172.27 8.58, 172 26.75 M172 26.75 C171.59 42.48, 170.01 61.72, 172 80.25 M172 26.75 C171.65 40.79, 171.14 55.14, 172 80.25 M172 80.25 C173.1 97.72, 163.21 106.09, 145.25 107 M172 80.25 C172.64 99.89, 164.46 106.15, 145.25 107 M145.25 107 C119.15 106.28, 91.97 109.02, 26.75 107 M145.25 107 C109.55 106.69, 73.13 106.53, 26.75 107 M26.75 107 C9.35 108.19, -0.64 98.98, 0 80.25 M26.75 107 C7.62 106.89, -2.16 99.63, 0 80.25 M0 80.25 C-0.99 65.47, -1.23 49.1, 0 26.75 M0 80.25 C0.68 64.33, -0.11 47.4, 0 26.75 M0 26.75 C1.67 9.09, 9.55 1.52, 26.75 0 M0 26.75 C-0.68 8.33, 9.79 2.18, 26.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(271.0832824707036 661.7558964320591) rotate(0 114.2619149344307 35)"><path d="M17.5 0 C70.21 0.15, 124.2 0.51, 211.02 0 C224.02 3.08, 227.73 6.95, 228.52 17.5 C228.04 28.42, 231.23 39.09, 228.52 52.5 C231.67 61.03, 225.54 70.89, 211.02 70 C158.02 70.39, 112.73 73.29, 17.5 70 C7.04 69.9, 1.57 60.74, 0 52.5 C1.86 38.89, -1.34 29.71, 0 17.5 C-1.66 2.86, 4.51 0.86, 17.5 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M17.5 0 C70.26 -2.74, 122.52 0.55, 211.02 0 M17.5 0 C56.89 2.04, 95.4 2.07, 211.02 0 M211.02 0 C223.73 -0.57, 229.89 4.46, 228.52 17.5 M211.02 0 C222.82 -0.62, 228.24 6.49, 228.52 17.5 M228.52 17.5 C228.04 27.28, 229.28 37.41, 228.52 52.5 M228.52 17.5 C229.44 29.6, 228.26 39.19, 228.52 52.5 M228.52 52.5 C226.61 63.47, 224.57 70.53, 211.02 70 M228.52 52.5 C230.14 65.95, 222.42 72.06, 211.02 70 M211.02 70 C147.9 70.91, 85.23 71.2, 17.5 70 M211.02 70 C137.39 69.26, 62.2 67.74, 17.5 70 M17.5 70 C7.21 70.7, 1.91 65.94, 0 52.5 M17.5 70 C7.19 71.01, 0.36 62.89, 0 52.5 M0 52.5 C-0.8 39.65, 0.31 26.94, 0 17.5 M0 52.5 C-0.61 39.97, -0.56 26.66, 0 17.5 M0 17.5 C1.61 6.2, 4.37 -1.38, 17.5 0 M0 17.5 C-2.22 5.98, 6.62 -0.19, 17.5 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(331.2785317557202 666.7558964320591) rotate(0 54.06666564941395 30)"><text x="54.06666564941406" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb_builder.py</text><text x="54.06666564941406" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb_graph.py </text><text x="54.06666564941406" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb_tensor.py</text></g><g stroke-linecap="round" transform="translate(270.22016688755525 161.76180812290738) rotate(0 84.26194545200894 25.16674804687503)"><path d="M12.58 0 C69.63 2.74, 123.77 0.31, 155.94 0 C162.95 -3.42, 168.19 6.27, 168.52 12.58 C170.12 21.15, 171.07 28.14, 168.52 37.75 C169.08 43.04, 164.73 49.42, 155.94 50.33 C122.09 49.68, 92.36 52.11, 12.58 50.33 C5.7 50.03, -1.61 45.58, 0 37.75 C0.5 32.98, -1.95 24.95, 0 12.58 C0.46 3.62, 5.31 1.5, 12.58 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M12.58 0 C64.45 0.97, 118.56 0.36, 155.94 0 M12.58 0 C65.77 1.23, 119.47 1.33, 155.94 0 M155.94 0 C165.37 0.68, 170.24 4.78, 168.52 12.58 M155.94 0 C165.83 1.72, 167.9 4.29, 168.52 12.58 M168.52 12.58 C169.93 22.22, 167.24 28.64, 168.52 37.75 M168.52 12.58 C168.94 18.86, 168.17 24.45, 168.52 37.75 M168.52 37.75 C169.85 46.78, 162.5 51.11, 155.94 50.33 M168.52 37.75 C166.97 44.15, 162.83 51.96, 155.94 50.33 M155.94 50.33 C103.54 49.9, 45.95 48.76, 12.58 50.33 M155.94 50.33 C118.74 48.82, 82.42 50.39, 12.58 50.33 M12.58 50.33 C5.82 48.49, 1.93 46.93, 0 37.75 M12.58 50.33 C3.73 50.45, -1.82 47.76, 0 37.75 M0 37.75 C0.97 30.54, 0.23 27.53, 0 12.58 M0 37.75 C-0.49 31.62, -0.1 24.58, 0 12.58 M0 12.58 C1.71 6.11, 6.06 -1.11, 12.58 0 M0 12.58 C-0.8 4.9, 3.31 1.04, 12.58 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(306.2071108136854 174.42855616978238) rotate(0 48.27500152587879 12.5)"><text x="48.275001525878906" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">xx_esb.py</text></g><g transform="translate(279.4619271414622 131.97307695661289) rotate(0 63.125 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">pyxx_esb.whl</text></g><g stroke-linecap="round" transform="translate(284.36305454799094 774.796701950893) rotate(0 100.33334350585938 19.565927109444885)"><path d="M9.78 0 C66.31 -0.08, 125.09 0.12, 190.88 0 C200.65 1.71, 200.13 4.91, 200.67 9.78 C202.26 13.73, 203.73 22.9, 200.67 29.35 C204.09 37.5, 195.65 36.81, 190.88 39.13 C143.67 36.08, 103.53 36.76, 9.78 39.13 C4.74 37.47, 0.16 36.67, 0 29.35 C0.88 24.01, -1.46 15.28, 0 9.78 C-1.81 4.03, 5.15 1.45, 9.78 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M9.78 0 C57.74 -3.09, 106.16 -3.21, 190.88 0 M9.78 0 C56.99 -0.69, 103.98 -1.11, 190.88 0 M190.88 0 C196.2 -0.16, 200.05 1.78, 200.67 9.78 M190.88 0 C196.07 1.98, 200.74 2.69, 200.67 9.78 M200.67 9.78 C200.2 17.2, 200.92 24.67, 200.67 29.35 M200.67 9.78 C199.94 15.19, 200.91 19.17, 200.67 29.35 M200.67 29.35 C202.46 35.48, 195.63 37.35, 190.88 39.13 M200.67 29.35 C201.27 37.05, 195.15 38.3, 190.88 39.13 M190.88 39.13 C117.71 36.05, 45.39 38.76, 9.78 39.13 M190.88 39.13 C133.16 38.43, 74.68 38.08, 9.78 39.13 M9.78 39.13 C3.69 39.73, 0.93 35.12, 0 29.35 M9.78 39.13 C1.2 39.63, -0.6 35.99, 0 29.35 M0 29.35 C-0.13 24.57, -0.65 21.01, 0 9.78 M0 29.35 C-0.06 24.73, -0.93 20.86, 0 9.78 M0 9.78 C-1.37 4.29, 4.58 -1.19, 9.78 0 M0 9.78 C-0.67 4.72, 2.58 -1.54, 9.78 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(319.8130667550222 784.5796655056154) rotate(0 64.88333129882812 9.782963554722414)"><text x="64.88333129882812" y="13.79006542673672" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="15.652741687555869px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb_builder_impl*</text></g><g transform="translate(279.43464437434795 752.9611144961692) rotate(0 84.15957407535552 9.782963554722414)"><text x="0" y="13.79006542673672" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="15.652741687555869px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libesb_builder_base.so</text></g><g stroke-linecap="round" transform="translate(646.4619271414622 593.9730769566129) rotate(0 157 59.5)"><path d="M29.75 0 C122.75 1.73, 220.8 1.26, 284.25 0 C303.41 -1.75, 310.74 12.58, 314 29.75 C315.91 41.55, 316.64 51.44, 314 89.25 C316.9 110.59, 303.91 116.07, 284.25 119 C195.61 122.07, 105.82 118.49, 29.75 119 C12.39 121.73, 2.4 109.11, 0 89.25 C2.49 63.86, -2.63 45.21, 0 29.75 C3.48 10.88, 10.58 1.49, 29.75 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M29.75 0 C83.4 0.05, 138.89 -1.23, 284.25 0 M29.75 0 C123.54 -1.35, 217.72 -1.65, 284.25 0 M284.25 0 C305.19 -0.4, 312.66 10.12, 314 29.75 M284.25 0 C302.95 1.08, 313.99 8.73, 314 29.75 M314 29.75 C313.55 49.95, 314.07 73.76, 314 89.25 M314 29.75 C313.76 42.87, 315.19 54.49, 314 89.25 M314 89.25 C314.5 108.08, 302.49 117.89, 284.25 119 M314 89.25 C313.22 106.98, 305.65 120.14, 284.25 119 M284.25 119 C230.46 117.46, 174.5 118.84, 29.75 119 M284.25 119 C206.21 119.62, 129.93 119.37, 29.75 119 M29.75 119 C11.85 117.17, -0.64 108.82, 0 89.25 M29.75 119 C9.91 120.17, 1.85 107.73, 0 89.25 M0 89.25 C0.34 67.16, 1.26 42.43, 0 29.75 M0 89.25 C-0.18 76.34, -1.26 64.73, 0 29.75 M0 29.75 C-0.16 10.6, 10.26 0.89, 29.75 0 M0 29.75 C-1.44 8.53, 11.92 -0.54, 29.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(652.7737688337061 640.0714285714284) rotate(0 148.57142857142844 32.78571428571428)"><path d="M16.39 0 C81.1 0.05, 144.61 -4.13, 280.75 0 C288.54 2.47, 300.53 8.44, 297.14 16.39 C300.57 29, 294.57 40.58, 297.14 49.18 C294.36 62.24, 293.28 67.69, 280.75 65.57 C208.99 69.68, 136.08 69.24, 16.39 65.57 C5.55 69.06, -2.67 56.54, 0 49.18 C0.57 38.4, 1.68 26.64, 0 16.39 C-3.08 4.9, 5.61 1.14, 16.39 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M16.39 0 C89.51 -1.81, 163.25 0.23, 280.75 0 M16.39 0 C80.14 -0.42, 143.54 0.8, 280.75 0 M280.75 0 C289.98 0.42, 298.42 6.55, 297.14 16.39 M280.75 0 C290.88 -0.64, 295.98 4.89, 297.14 16.39 M297.14 16.39 C298.94 30.8, 297.34 42.43, 297.14 49.18 M297.14 16.39 C297.26 24.21, 297.32 30.04, 297.14 49.18 M297.14 49.18 C298.53 58.81, 292.87 63.84, 280.75 65.57 M297.14 49.18 C297.94 60.82, 292.86 67.24, 280.75 65.57 M280.75 65.57 C186.72 67.04, 88.83 67.68, 16.39 65.57 M280.75 65.57 C216.38 65.5, 151.26 66.05, 16.39 65.57 M16.39 65.57 C6.75 66.65, 1.5 58.26, 0 49.18 M16.39 65.57 C5.83 65.88, 1.27 57.91, 0 49.18 M0 49.18 C1.95 40.63, -0.91 37, 0 16.39 M0 49.18 C0.48 39.56, -0.13 31.02, 0 16.39 M0 16.39 C-1.79 7.4, 5.55 -0.05, 16.39 0 M0 16.39 C0.36 6.4, 3.32 -0.53, 16.39 0" stroke="#2f9e44" stroke-width="2" fill="none"></path></g><g transform="translate(709.7737688337056 658.6428571428572) rotate(0 98.35832977294922 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb_generator_impl*</text></g><g transform="translate(700.916625976563 519.0714285714284) rotate(0 110.26667022705078 50)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#2f9e44" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="0" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#2f9e44" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="0" y="67.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#2f9e44" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="0" y="92.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#2f9e44" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb generator二进制bin</text></g><g stroke-linecap="round" transform="translate(21.37835768842683 754.6600762833618) rotate(0 117.08356945303547 29.313000673251167)"><path d="M14.66 0 C90.15 4.07, 164.63 3.84, 219.51 0 C226.93 2.01, 237.29 6.29, 234.17 14.66 C234.29 19.32, 233.64 24.98, 234.17 43.97 C236.99 53.19, 230.2 61.53, 219.51 58.63 C166.56 60.17, 111.11 61.27, 14.66 58.63 C4.52 59.6, -0.52 57.18, 0 43.97 C1.89 39.67, -3 27.45, 0 14.66 C0.29 1.59, 4.17 1.69, 14.66 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M14.66 0 C58.71 0.11, 102.06 -0.64, 219.51 0 M14.66 0 C66.61 -1.59, 118.99 -1.73, 219.51 0 M219.51 0 C227.76 -1.18, 234.08 3.79, 234.17 14.66 M219.51 0 C229.51 -1.08, 235.11 6.26, 234.17 14.66 M234.17 14.66 C232.43 25.85, 235.52 36.53, 234.17 43.97 M234.17 14.66 C234.52 22.83, 234.88 32.27, 234.17 43.97 M234.17 43.97 C234.86 54.78, 227.64 58.3, 219.51 58.63 M234.17 43.97 C232.13 55.86, 231.38 58.79, 219.51 58.63 M219.51 58.63 C163.72 60, 110.44 59, 14.66 58.63 M219.51 58.63 C162.23 58.3, 104.49 57.57, 14.66 58.63 M14.66 58.63 C2.99 56.66, -0.14 55.06, 0 43.97 M14.66 58.63 C6.23 58.42, -1.03 55.27, 0 43.97 M0 43.97 C-1.14 31.78, 1.87 22.57, 0 14.66 M0 43.97 C0.02 37.49, 0.39 28.83, 0 14.66 M0 14.66 C1.36 5.04, 6.59 0.26, 14.66 0 M0 14.66 C-0.58 6.02, 3.53 2.12, 14.66 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(49.04917668646044 773.4757868876757) rotate(0 97.13376843430092 14.699780919022032)"><path d="M7.35 0 C42.61 -0.12, 80.96 0.84, 186.92 0 C194.94 1.4, 191.17 3.63, 194.27 7.35 C193.75 10.57, 196.34 16.66, 194.27 22.05 C195.19 29.86, 190.41 30.02, 186.92 29.4 C130.2 33.45, 76.4 31.71, 7.35 29.4 C1.93 32.84, -2.34 24.72, 0 22.05 C-2.56 15.81, 0.1 11.18, 0 7.35 C-0.72 4.14, 2.11 1.46, 7.35 0" stroke="none" stroke-width="0" fill="#b2f2bb"></path><path d="M7.35 0 C60.79 -0.86, 109.97 -0.55, 186.92 0 M7.35 0 C72.31 0.31, 135.42 0.45, 186.92 0 M186.92 0 C191.73 -1.1, 194.47 1.51, 194.27 7.35 M186.92 0 C192.76 1.37, 195.84 3.97, 194.27 7.35 M194.27 7.35 C194.98 11.3, 194.08 16.26, 194.27 22.05 M194.27 7.35 C194.59 11.8, 194.53 16.33, 194.27 22.05 M194.27 22.05 C192.63 26.63, 190.05 31.24, 186.92 29.4 M194.27 22.05 C196.36 27.11, 190.99 28, 186.92 29.4 M186.92 29.4 C123.97 29.45, 62.57 31.22, 7.35 29.4 M186.92 29.4 C137.23 29.12, 88.09 28.76, 7.35 29.4 M7.35 29.4 C2.31 30.72, 1.17 26.77, 0 22.05 M7.35 29.4 C1.42 30.93, 2.14 25.54, 0 22.05 M0 22.05 C1.34 18.65, -0.61 12.08, 0 7.35 M0 22.05 C0.19 16.57, 0.52 11.68, 0 7.35 M0 7.35 C1.71 2.71, 1.94 0.99, 7.35 0 M0 7.35 C-1.35 4.57, 4.11 1.11, 7.35 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(97.44961153311488 780.8256773471867) rotate(0 48.733333587646484 7.349890459511016)"><text x="48.733333587646484" y="10.360405591726709" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.759824735217602px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">esb_builder_impl*</text></g><g transform="translate(48.28424538057948 754.7439829114907) rotate(0 81.21600966794233 7.349890459511016)"><text x="0" y="10.360405591726709" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.759824735217602px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">libesb_builder_base_static.a</text></g></svg>
Rdocs/es/es_ownership_analysis.mddocs/es/design/ownership_analysis.md+1-0
@@ -462,3 +462,4 @@ Python 引用链:
462 462 
463 463 
464 464 
465+ 
@@ -0,0 +1,31 @@
1+# RFC 文档
2+ 
3+本目录用于存放 ES 模块的设计提案(RFC - Request for Comments)文档。
4+ 
5+## 什么是 RFC?
6+ 
7+RFC 是用于讨论和记录重要设计决策的文档格式。当需要对 ES 模块进行重大变更、新功能添加或架构改进时,应提交 RFC 文档。
8+ 
9+## RFC 流程
10+ 
11+1. 创建 RFC 文档(建议使用编号,如 `rfc-001-feature-name.md`
12+2. 提交 Pull Request 进行讨论
13+3. 根据反馈进行修改
14+4. 获得批准后合并
15+ 
16+## 当前 RFC
17+ 
18+暂无 RFC 文档。
19+ 
20+## 如何提交 RFC
21+ 
22+1. 创建新的 RFC 文档
23+2. 包含以下内容:
24+ - 概述和目标
25+ - 详细设计
26+ - 实现计划
27+ - 影响分析
28+ - 替代方案
29+3. 提交 PR 并等待审查
30+ 
31+ 
Rdocs/es/gen_esb_readme.mddocs/es/tools/gen_esb.md+18-16
@@ -1,24 +1,24 @@
1# ES (Eager Style) Graph Builder Code Generator1# ES (Eager Style) Graph Builder Code Generator
2-## 前置要求:2+## 前置要求
3-1. 通过[安装指导](../../README.md)正确安装`toolkit`包, 并正确配置环境变量3+1. 通过[安装指导](../../build.md)正确安装`toolkit`包并正确配置环境变量
4-2. 通过[安装指导](https://gitcode.com/cann/ops-math/blob/master/docs/zh/context/quick_install.md)正确安装算子`ops`包 (ES依赖算子原型进行API生成), 并正确配置环境变量4+2. 通过[安装指导](../../build.md)正确安装算子`ops`包ES 依赖算子原型进行 API 生成),并正确配置环境变量
5## 环境变量要求5## 环境变量要求
6-: 环境变量在前置要求中已经被配置, 仅列出gen_esb所需环境变量列表6+环境变量在前置要求中已经被配置仅列出 gen_esb 所需环境变量列表
7- ASCEND_OPP_PATH: 指向安装目录下的opp路径7- ASCEND_OPP_PATH: 指向安装目录下的opp路径
8- LD_LIBRARY_PATH: 指定动态链接库搜索路径的环境变量8- LD_LIBRARY_PATH: 指定动态链接库搜索路径的环境变量
9 9 
10-## 功能说明10+## 功能说明
11-### 本程序用于生成ES图构建器的CC++,Python代码,包括:11+### 本程序用于生成 ES 图构建器的 CC++Python 代码,包括:
12- 所有支持的算子(ops)的C接口12- 所有支持的算子(ops)的C接口
13- 所有支持的算子的C++接口13- 所有支持的算子的C++接口
14- 所有支持的算子的Python接口14- 所有支持的算子的Python接口
15- 聚合头文件,方便用户一次性包含所有算子15- 聚合头文件,方便用户一次性包含所有算子
16- 聚合Python文件,方便用户一次性导入所有算子16- 聚合Python文件,方便用户一次性导入所有算子
17 17
18-## 使用方法18+## 使用方法
19### `./gen_esb [--output_dir=DIR] [--module_name=NAME] [--h_guard_prefix=PREFIX] [--exclude_ops=OP_TYPE1,OP_TYPE2]`19### `./gen_esb [--output_dir=DIR] [--module_name=NAME] [--h_guard_prefix=PREFIX] [--exclude_ops=OP_TYPE1,OP_TYPE2]`
20 20 
21-### 参数说明21+### 参数说明
22- --output_dir:可选参数,指定代码生成的目标目录22- --output_dir:可选参数,指定代码生成的目标目录
23 如果不指定,默认输出到当前目录23 如果不指定,默认输出到当前目录
24- --module_name:可选参数,控制聚合头文件的命名24- --module_name:可选参数,控制聚合头文件的命名
@@ -29,10 +29,10 @@
29 - 如果不指定,使用默认前缀29 - 如果不指定,使用默认前缀
30 - 指定时,拼接默认前缀30 - 指定时,拼接默认前缀
31 - python文件不感知此参数,同名场景通过不同的路径避免冲突31 - python文件不感知此参数,同名场景通过不同的路径避免冲突
32-- --exclude_ops: 可选参数, 控制排除生成的算子32+- --exclude_ops可选参数控制排除生成的算子
33- - 根据','分隔算子名33+ - 根据 `,` 分隔算子名
34 34
35-### 输出文件说明35+### 输出文件说明
36- es_\<module>_ops_c.h:C接口聚合头文件36- es_\<module>_ops_c.h:C接口聚合头文件
37- es_\<module>_ops.h:C++接口聚合头文件37- es_\<module>_ops.h:C++接口聚合头文件
38- es_\<module>_ops.py:Python接口聚合文件38- es_\<module>_ops.py:Python接口聚合文件
@@ -41,7 +41,7 @@
41- es_<op_type>.h:单个算子的C++接口头文件41- es_<op_type>.h:单个算子的C++接口头文件
42- es_<op_type>.py:单个算子的Python接口文件42- es_<op_type>.py:单个算子的Python接口文件
43 43
44-## 使用示例44+## 使用示例
45### 生成到当前目录,使用默认模块名"all",默认保护宏前缀45### 生成到当前目录,使用默认模块名"all",默认保护宏前缀
46`./gen_esb`46`./gen_esb`
47 47
@@ -57,19 +57,21 @@
57### 生成到指定目录,使用"math"模块名,自定义保护宏前缀"MY_CUSTOM"57### 生成到指定目录,使用"math"模块名,自定义保护宏前缀"MY_CUSTOM"
58`./gen_esb --output_dir=./output --module_name=math --h_guard_prefix=MY_CUSTOM`58`./gen_esb --output_dir=./output --module_name=math --h_guard_prefix=MY_CUSTOM`
59 59 
60-### 生成到指定目录,使用"math"模块名,自定义保护宏前缀"MY_CUSTOM", 并排除Add算子生成60+### 生成到指定目录,使用"math"模块名,自定义保护宏前缀"MY_CUSTOM"并排除 Add 算子生成
61`./gen_esb --output_dir=./output --module_name=math --h_guard_prefix=MY_CUSTOM --exclude_ops=Add`61`./gen_esb --output_dir=./output --module_name=math --h_guard_prefix=MY_CUSTOM --exclude_ops=Add`
62 62 
63## 检查环境变量63## 检查环境变量
64`echo $ASCEND_OPP_PATH`64`echo $ASCEND_OPP_PATH`
65 65
66-## 注意事项66+## 注意事项
671. 确保ASCEND_OPP_PATH环境变量已正确设置671. 确保ASCEND_OPP_PATH环境变量已正确设置
682. 确保有足够的磁盘空间存储生成的代码文件682. 确保有足够的磁盘空间存储生成的代码文件
693. 生成的代码文件数量取决于系统中注册的算子数量693. 生成的代码文件数量取决于系统中注册的算子数量
704. 保护宏前缀应该以大写字母和下划线组成,避免与C++关键字冲突704. 保护宏前缀应该以大写字母和下划线组成,避免与C++关键字冲突
71 71
72-## 错误处理72+## 错误处理
73- 如果环境变量未设置,程序会提示错误并退出73- 如果环境变量未设置,程序会提示错误并退出
74- 如果输出目录创建失败,会回退到当前目录74- 如果输出目录创建失败,会回退到当前目录
75-- 不支持的算子会被记录在生成的代码注释中75+- 不支持的算子会被记录在生成的代码注释中
76+ 
77+ 
Rcmake/generate_es_package_cmake_readme.mddocs/es/tools/generate_es_package_cmake_readme.md+21-22文件内容审核中,请稍后刷新重试