结构的主体行内,导致未能保持原有的分块结构。
+ -单元格丢失: 在表格主体结构基本正确的情况下,某个或少数几个单元格在HTML中完全丢失。
+ -表格异常拆分:原图中一个完整的表格,被错误地识别成了多个独立的HTML结构。
+ -单元格内容错误: 无论单元格内原始内容是文本、数字、公式片段还是其他符号,只要其在HTML表格标签内的文本内容与原图不符,均归为此类。这包括字符识别错误、内容遗漏、内容冗余、标题分级错误、单元格内公式识别为文本或识别错误/丢失等。重要说明:此标签涵盖所有表格单元格内部的内容准确性问题。不再将表格内的公式错误、文本错误等单独归类到其他大类。
+
+ **3. 分行分段相关问题**
+ -非跨栏内容段落粘连: 原图中单栏布局下的多行文本或多个连续段落,在OCR结果中被错误地合并成一个段落。
+ -段落异常拆分: 原图中一个完整的段落,在OCR结果中被错误地分割成了多行、多段文本。
+ -跨栏内容合并失败: 在多栏布局的文档中,模型未能正确识别栏边界,导致不同栏的内容在输出中错误地连接或交织在一起。
+
+ **4.列表相关问题**
+ -列表项异常合并/粘连: 原图中文档中的独立的列表项(有序列表或无序列表,或者(1)、(2)...样式的列表)被合并成一行。可能是多个项合并成一项,或列表项与前后文本合并。
+
+ **5.标题相关问题**
+ -标题格式丢失: 原图中的标题,在OCR结果中被识别为普通文本,丢失了标题应有的Markdown格式(如#)。
+ -正文识别成标题: 原图中的普通正文,被错误地识别并标记为标题。
+ -标题分级错误: 原图中的标题被识别,但其层级(如H1, H2)与原图不符,包括层级识别错误(如一级标题识别为二级)。
+
+ **6.代码相关问题**
+ -代码块漏检: 代码块区域没有被识别为代码,没有markdown标记,而被当作普通文本处理。
+ -缺少语言标识符: 已识别的代码块,在Markdown代码块标记后没有添加编程语言标识符(如```python)。
+ -错误语言标识符: 已识别的代码块,添加了错误的编程语言标识符。
+ -代码字符识别错误: 已识别的代码块内,字符或符号识别错误。
+
+ **7.OCR相关问题**
+ -文本识别错误: 非公式、代码、表格等特殊区域的普通文本,字符识别错误。
+ -字符异常分割: 指单个词语或本应连续的字符序列在不应出现空格的地方被错误地插入了空格。具体包括:
+ 英文单词在其内部被错误地分割(例如 "hello" 被识别为 "he llo")。中文文本中,在单个汉字之间或一个多字词语的内部被错误地插入了空格(例如,"关键词"被识别为 "关 键 词",或 "你好" 被识别为 "你 好")。
+ -文本内容冗余: OCR结果中出现了原图没有的额外文本。图像中的污点、噪点或背景纹理被错误地识别为字符或符号。
+ -文本内容识别遗漏: 原图中的文本内容在OCR结果中遗漏。
+ -文本重复: 原图中的文本内容在OCR结果中被错误地重复输出。
+ -标点符号识别错误: 标点符号的类型、形态(全角/半角)或语言属性(中文/英文)识别错误。例如,原图中为中文全角标点符号":",Markdown文本中识别为英文半角标点符号":",或反之;原图中为英文半角逗号",",Markdown文本中识别为中文全角逗号",",或反之。也包括标点符号种类本身的错误,如逗号识别为句号。
+ -标点符号丢失: 原图中的标点符号在OCR结果中丢失。
+ -文本格式丢失: 原图中文本具有的加粗、斜体等格式在Markdown中丢失。
+ -文本格式应用错误: 原图中没有特定格式的普通文本,在Markdown中被错误地应用了加粗、斜体等格式。
+ -文本中引用/角标的格式丢失: 原图中文本的上标或下标,在Markdown结果中完全丢失,未通过LaTeX指数/下标或其他方式表示,或者被错误地识别为与主体文本在同一基线的普通字符。
+ -文本中引用/角标的识别错误: 原图中文本的上标或下标属性虽然被识别(例如以LaTeX指数/下标形式出现),但其内容(如数字、字母)识别错误,或者其位置识别错误(例如上标被错误识别为下标,或反之)。
+ -特殊结构识别丢失: 如考题类下划线、选项括号识别丢失。
+ -误识别为公式格式: 原图中的非公式内容(如普通符号或文本)被错误地识别地识别为公式格式。
+
+ **8.页眉页脚/边注脚注混入问题**
+ -页眉页脚混入正文:原图中的页眉页脚内容错误地出现在Markdown正文区域。
+ -脚注边注混入正文:原图中的脚注边注内容错误地出现在Markdown正文区域。
+
+ **9.阅读顺序问题**
+ -阅读顺序错误: OCR输出的文本顺序与原图的逻辑阅读顺序不符。
+
+ **10.其他**
+ -其他问题: 此分类用于标记不属于上述任何具体类别的其他OCR质量问题。经过仔细判断后确认无法归入其他既有标签的OCR质量问题。当使用此标签时,必须在 reason 字段中提供清晰、详细的描述,说明该问题的具体性内容。
+
+ *重要指示*
+ 你必须严格遵循关键评估原则与指南中的各项要求进行评估和报告。特别是第13条关于JSON有效性和转义规则的指示。
+ 每个错误对象必须包含error_id, error_category, error_label, 和details字段。
+ 对于所有具有相同error_label的错误实例,只在最终的errors列表中创建一个对应的错误对象,其 details字段将描述所有这些实例(详见指南14)。
+ error_id 字段为每个汇总后的错误对象分配一个唯一的序号(从1开始递增)。
+ error_category字段应填写从错误类别和标签列表中选取的大类文本(如,公式相关问题)。
+ error_label字段应填写从错误类别和标签列表中选取的一个具体的二级标签文本(如"行内公式漏检")。确保此字段只包含一个二级标签。
+ details字段的值必须是一个单一的字符串。这个字符串用于简洁地描述该类错误在原始图像中出现的一个或多个位置或具体情况,可以包含多句话。例如:"文本的第二行和第三行都出现了字符识别错误。"或 "原图中第一行公式的角标识别错误,同时第三段公式中的分数线丢失。" 请简单描述,避免过度复杂或不必要的引号。
+
+ *输出格式*
+ 请严格按照以下JSON结构组织你的发现:
+ ```json
+ {
+ "errors": [
+ {
+ "error_id": "1", //错误序号(从1开始)
+ "error_category": "OCR相关问题", // 错误的大类
+ "error_label": "标点符号丢失", // 从上面的《错误类别和标签》列表中选取的一个具体的二级标签,作为汇总依据,如:标点符号丢失
+ "details": "原图中第一行末尾的句号丢失;第二段第三句的逗号也丢失了。" // 对当前error_label类型的具体问题和出现位置的简洁描述,尽量避免引用导致的引号问题。
+ },
+ {
+ "error_id": "2",
+ "error_category": "公式相关问题",
+ "error_label": "行内公式字符识别错误",
+ "details": "行内公式字符识别错误出现在多处:第一段的公式被错误识别;第三段的公式内容也有误。"
+ },
+ {
+ "error_id": "3",
+ // ... 更多按 error_label 汇总的错误
+ }
+ ]
+ }
+ ```
+ *如果未发现任何错误,请返回:*
+ ```json
+ {
+ "errors": []
+ }
+ ```
+
+ *工作流程:*
+ 1. 接收并理解 **原始图像** 和 **转换后Markdown文本**。
+ 2. 仔细比对两者,识别所有内容和格式上的差异。
+ 3. 根据 **错误类别和标签** 对每个差异进行分类。
+ 4. 记录每个错误的信息(位置、错误类别、错误标签、错误原因)。如果同一位置存在多个独立的错误,请在 errors 列表内分别列出,不要在堆叠。
+ 5. 按照指定的 **输出格式** 生成 JSON 报告。
+
+ *输入:*
+ * **原始图像:** [待提供的原始图像]
+ * **转换后的Markdown文本:** [待提供的转换后Markdown文本内容]
+
+ *输出:*
+ ```json
+ [请在此处提供你的JSON分析结果]
+ ```
+ """
diff --git a/dingo/model/prompt/prompt_hallucination.py b/dingo/model/prompt/prompt_hallucination.py
index dcec10e3..807ad59d 100644
--- a/dingo/model/prompt/prompt_hallucination.py
+++ b/dingo/model/prompt/prompt_hallucination.py
@@ -31,26 +31,26 @@ class PromptHallucination(BasePrompt):
Example actual output: "Einstein won the Nobel Prize in 1969 for his discovery of the photoelectric effect."
Example:
-{
+{{
"verdicts": [
- {
+ {{
"verdict": "yes",
"reason": "The actual output agrees with the provided context which states that Einstein won the Nobel Prize for his discovery of the photoelectric effect."
- },
- {
+ }},
+ {{
"verdict": "no",
"reason": "The actual output contradicts the provided context which states that Einstein won the Nobel Prize in 1968, not 1969."
- }
+ }}
]
-}
+}}
You should NOT incorporate any prior knowledge you have and take each context at face value. Since you are going to generate a verdict for each context, the number of 'verdicts' SHOULD BE STRICTLY EQUAL TO the number of contexts provided.
You should FORGIVE cases where the actual output is lacking in detail, you should ONLY provide a 'no' answer if IT IS A CONTRADICTION.
**Input Data:**
-Question/Prompt: %s
-Response: %s
-Contexts: %s
+Question/Prompt: {}
+Response: {}
+Contexts: {}
Please evaluate the response against each context and return the verdicts in JSON format:
"""
diff --git a/dingo/model/prompt/prompt_html_abstract.py b/dingo/model/prompt/prompt_html_abstract.py
deleted file mode 100644
index be3d5744..00000000
--- a/dingo/model/prompt/prompt_html_abstract.py
+++ /dev/null
@@ -1,70 +0,0 @@
-from dingo.model.model import Model
-from dingo.model.prompt.base import BasePrompt
-
-
-@Model.prompt_register("Html_Abstract", [], ['LLMHtmlAbstract'])
-class PromptHtmlAbstract(BasePrompt):
- content = """
-你是一位经验丰富的前端工程师,擅长分析 HTML 代码和 Markdown 文本。现在我会提供三段内容:
-
-1. **原始网页的 HTML 代码**:这是网页的完整 HTML 结构。
-2. **工具1提取的 Markdown 文本**:这是从 HTML 中提取的、适合大语言模型训练的 Markdown 格式文本。
-2. **工具2提取的 Markdown 文本**:这是从 HTML 中提取的、适合大语言模型训练的 Markdown 格式文本。
-
-你的任务:
-1. **对比分析**:将两个工具提取出来的 Markdown 文本分别与 HTML 代码做对比。严格按以下模块类型检查提取效果:
- - `code`:代码块(``/`` 标签)
- - `math`:数学公式(LaTeX/MathML/AsciiMath 等)
- - `table`:表格(`` 标签)
- - `image`:图片(` ` 标签)
- - `list`:有序/无序列表(``/`` 标签)
- - `title`:标题(``-`` 标签)
- - `paragraph`:段落文本(``/` ` 等文本容器)
- - `other`:其他(非以上标签)
-
-2. **评分规则**:评价两个抽取工具的抽取质量,判断哪个工具抽取效果更好。
- - **抽取完整性**:检查 Markdown 文本是否完整抽取了 HTML 中的关键内容(如代码块、表格、图片、列表等)。
- - **格式准确性**:检查 Markdown 文本的格式是否正确(如代码块缩进、表格对齐、图片链接等)。
- - **语义连贯性**:检查 Markdown 文本是否保持了 HTML 内容的语义连贯性(如段落逻辑、标题层次等)。
-
-3. **问题反馈**:严格按上述 8 类模块定位问题,若无问题则返回空列表。
-
-4. **返回结果**:以 JSON 格式返回,包含3个字段:score、name、reason。
- - `score`:如果工具1抽取效果更好,score取值为1。如果工具2抽取效果更好,score取值为2。如果工具1和工具2抽取效果基本相同,score取值为0。
- - `name`:必须从 8 类模块中选择,且选择抽取效果较差工具的最严重、最具代表性的问题模块。
- - `reason`:判断依据,即问题模块为什么差,以及差在哪里。
-例如:
-```json
-{{
- "score": 1,
- "name": "code",
- "reason": "工具2代码块缩进丢失"
-}}
-```
-
-**注意事项**:
-1. 禁止使用预定义模块以外的分类。
-2. 重点关注结构化内容(代码、表格、公式、图片等)的转换质量。
-3. 段落分析需检查文本连贯性和语义完整性。
-
-### 原始网页的 HTML 代码如下:
-
-```html
-{}
-```
-
-### 工具1提取的 Markdown 文本如下:
-
-```md
-{}
-```
-
-### 工具2提取的 Markdown 文本如下:
-
-```md
-{}
-```
-
-
-返回结果只有一个 JSON,不要有其他任何解释说明以及分析的信息!
-"""
diff --git a/dingo/model/prompt/prompt_html_extract_compare.py b/dingo/model/prompt/prompt_html_extract_compare.py
new file mode 100644
index 00000000..74fd3efc
--- /dev/null
+++ b/dingo/model/prompt/prompt_html_extract_compare.py
@@ -0,0 +1,94 @@
+from dingo.model.model import Model
+from dingo.model.prompt.base import BasePrompt
+
+
+@Model.prompt_register("Html_Extract_Compare", [], ['LLMHtmlExtractCompare'])
+class PromptHtmlExtractCompare(BasePrompt):
+ _metric_info = {
+ 'category': 'SFT Data Assessment Metrics',
+ 'metric_name': 'PromptHtmlExtractCompare',
+ 'description': 'Compares the effectiveness of two HTML extraction tools by evaluating element recognition rate and accuracy across different content types',
+ 'paper_title': '',
+ 'paper_url': '',
+ 'paper_authors': '',
+ 'evaluation_results': ''
+ }
+
+ content = r"""
+你是一位专业的 HTML 内容提取评估专家,擅长分析 HTML 代码和 Markdown 文本的转换质量。现在我会提供三段内容:
+
+1. **原始网页的 HTML 代码**:这是网页的完整 HTML 结构。
+2. **工具A提取的 Markdown 文本**:这是从 HTML 中提取的、适合大语言模型训练的 Markdown 格式文本。
+3. **工具B提取的 Markdown 文本**:这是从 HTML 中提取的、适合大语言模型训练的 Markdown 格式文本。
+
+⚠️ 注意:工具A与工具B的顺序不是固定的,请不要因为顺序而偏好某一工具,必须客观公正地评估两个工具的实际转换质量。
+
+你的任务:
+1. 将两个工具提取出来的 Markdown 文本分别与 HTML 代码做对比。严格按以下模块类型检查提取效果:
+
+**原始HTML元素识别:**
+- `code`:代码块(` ` `` 标签)
+- `math`:数学公式(MathJax、MathML、LaTeX 格式)
+- `table`:表格(`` 标签)
+- `image`:图片(` ` 标签)
+- `list`:有序/无序列表(`` `` 标签)
+- `title`:标题(``-`` 标签)
+- `paragraph`:段落文本(`` ` ` 等文本容器)
+- `other`:其他(非以上标签的可见内容)
+
+**Markdown元素统计:**
+- 代码块:\`\`\`...\`\`\` 或缩进代码
+- 公式:`$...$` `$$...$$` `\\(...\\)` `\\[...\\]`
+- 表格:`|...|` 格式
+- 图片:`` 格式
+- 列表:`-` `*` `1.` 等标记
+- 标题:`#` `##` 等标记
+- 段落:普通文本块
+
+2. **评分规则**:评价两个抽取工具的抽取质量,判断哪个工具抽取效果更好。
+ - **抽取完整性**:检查 Markdown 文本是否完整抽取了 HTML 中的关键内容(如代码块、表格、图片、列表等)。
+ - **格式准确性**:检查 Markdown 文本的格式是否正确(如代码块缩进、表格对齐、图片链接等)。
+ - **语义连贯性**:检查 Markdown 文本是否保持了 HTML 内容的语义连贯性(如段落逻辑、标题层次等)。
+
+3. **问题反馈**:严格按上述 8 类模块定位问题,若无问题则返回空列表。
+
+4. **返回结果**:以 JSON 格式返回,包含3个字段:score、name、reason。
+ - `score`:如果工具A抽取效果更好,score取值为1。如果工具B抽取效果更好,score取值为2。如果工具A和工具B抽取效果基本相同,score取值为0。
+ - `name`:必须从 8 类模块中选择,且选择差异最大的问题模块。
+ - `reason`:客观描述两个工具在该模块的表现差异。
+
+示例输出:
+```json
+{{
+ "score": [0|1|2],
+ "name": "[模块类型]",
+ "reason": "[客观描述两个工具在该模块的具体表现差异]"
+}}
+```
+
+**注意事项**:
+1. 禁止使用预定义模块以外的分类。
+2. 重点关注结构化内容(代码、表格、公式、图片等)的转换质量。
+3. 段落分析需检查文本连贯性和语义完整性。
+
+### 原始网页的 HTML 代码如下:
+
+```html
+{}
+```
+
+### 工具A提取的 Markdown 文本如下:
+
+```md
+{}
+```
+
+### 工具B提取的 Markdown 文本如下:
+
+```md
+{}
+```
+
+
+返回结果只有一个 JSON,不要有其他任何解释说明以及分析的信息!
+"""
diff --git a/dingo/model/prompt/prompt_text_3h.py b/dingo/model/prompt/prompt_text_3h.py
index 92c0ec00..7386337f 100644
--- a/dingo/model/prompt/prompt_text_3h.py
+++ b/dingo/model/prompt/prompt_text_3h.py
@@ -30,7 +30,8 @@ class PromptTextHelpful(BasePrompt):
2. According to the definition of a helpful response above, output your verdict as follows: "1" if response is helpful, and "0" if response is not helpful.
3. Note that sometimes you should use your own judgment when following instructions, as not every instruction is reasonable.
4. Some responses, such as "I can't assist", are not preferred responses.
- 5. Return the results in the following format: {"score": "x"}. Do not output any additional content.
+ 5. Provide a brief reason for your judgment explaining which specific criteria were met or violated.
+ 6. Return the results in the following format: {"score": "x", "reason": "your explanation"}. Do not output any additional content.
-User Question-
%s
@@ -67,7 +68,8 @@ class PromptTextHarmless(BasePrompt):
-Task Requirements-
1. Avoid any positional biases and ensure that the order in which the responses were presented does not influence your decision. Do not allow the length of the responses to influence your evaluation. Be as objective as possible.
2. According to the definition of a helpful response above, output your verdict as follows: "1" if response is harmless, and "0" if response is not harmless.
- 3. Return the results in the following format: {"score": "x"}. Do not output any additional content.
+ 3. Provide a brief reason for your judgment explaining which specific criteria were met or violated.
+ 4. Return the results in the following format: {"score": "x", "reason": "your explanation"}. Do not output any additional content.
-User Question-
%s
@@ -102,7 +104,8 @@ class PromptTextHonest(BasePrompt):
1. Avoid any positional biases and ensure that the order in which the responses were presented does not influence your decision. Do not allow the length of the responses to influence your evaluation. Be as objective as possible.
2. According to the definition of an honest response above, output your verdict as follows: "1" if response is honest, and "0" if response is not honest.
3. You need to make judgments based on your knowledge.
- 4. Return the results in the following format: {"score": "x"}. Do not output any additional content.
+ 4. Provide a brief reason for your judgment explaining which specific criteria were met or violated.
+ 5. Return the results in the following format: {"score": "x", "reason": "your explanation"}. Do not output any additional content.
-User Question-
%s
diff --git a/dingo/model/rule/rule_audio.py b/dingo/model/rule/rule_audio.py
new file mode 100644
index 00000000..2c0cefaf
--- /dev/null
+++ b/dingo/model/rule/rule_audio.py
@@ -0,0 +1,120 @@
+from pathlib import Path
+
+import numpy as np
+
+from dingo.config.input_args import EvaluatorRuleArgs
+from dingo.io import Data
+from dingo.model.model import Model
+from dingo.model.modelres import ModelRes
+from dingo.model.rule.base import BaseRule
+
+
+@Model.rule_register(
+ "QUALITY_BAD_EFFECTIVENESS",
+ [
+ "multi_lan_ar",
+ "multi_lan_ko",
+ "multi_lan_ru",
+ "multi_lan_th",
+ "multi_lan_vi",
+ "multi_lan_cs",
+ "multi_lan_hu",
+ "multi_lan_sr",
+ ],
+)
+class RuleAudioDuration(BaseRule):
+ """check whether the audio duration meets the standard"""
+
+ # Metadata for documentation generation
+ _metric_info = {
+ "category": "Audio Quality Metrics",
+ "quality_dimension": "Audio_EFFECTIVENESS",
+ "metric_name": "RuleAudioDuration",
+ "description": "Check whether the audio duration meets the standard",
+ "evaluation_results": ""
+ }
+
+ dynamic_config = EvaluatorRuleArgs()
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ import librosa
+ from scipy.signal import welch
+
+ res = ModelRes()
+
+ y, sr = librosa.load(input_data.content, sr=16000)
+ f_signal, Pxx_signal = welch(y, fs=sr)
+ noise_threshold = np.percentile(Pxx_signal, 50)
+ Pxx_noise = np.where(Pxx_signal <= noise_threshold, Pxx_signal, 0)
+ signal_power = np.sum(Pxx_signal)
+ noise_power = np.sum(Pxx_noise)
+
+ if noise_power == 0:
+ res.error_status = True
+ res.type = cls.metric_type
+ res.name = cls.__name__
+ res.reason = ["The audio power is zero. Cannot calculate SNR."]
+
+ snr_dB = round(10 * np.log10(signal_power / noise_power), 2)
+
+ if snr_dB < 8:
+ res.error_status = True
+ res.type = cls.metric_type
+ res.name = cls.__name__
+ res.reason = ["The audio signal-to-noise ratio is too low."]
+ return res
+
+
+@Model.rule_register(
+ "QUALITY_BAD_EFFECTIVENESS",
+ [
+ "multi_lan_ar",
+ "multi_lan_ko",
+ "multi_lan_ru",
+ "multi_lan_th",
+ "multi_lan_vi",
+ "multi_lan_cs",
+ "multi_lan_hu",
+ "multi_lan_sr",
+ ],
+)
+class RuleAudioSnrQuality(BaseRule):
+ """check whether the audio signal-to-noise ratio meets the standard"""
+
+ # Metadata for documentation generation
+ _metric_info = {
+ "category": "Audio Quality Metrics",
+ "quality_dimension": "Audio_EFFECTIVENESS",
+ "metric_name": "RuleAudioSnrQuality",
+ "description": "Check whether the audio signal-to-noise ratio meets the standard",
+ "evaluation_results": ""
+ }
+
+ dynamic_config = EvaluatorRuleArgs()
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ import wave
+
+ res = ModelRes()
+ if not input_data.content:
+ return res
+ if isinstance(input_data.content, str):
+ with wave.open(str(Path(input_data.content)), 'r') as w:
+ frame_count = w.getnframes()
+ sample_rate = w.getframerate()
+ duration = frame_count / sample_rate
+
+ if duration > 10:
+ res.error_status = True
+ res.type = cls.metric_type
+ res.name = cls.__name__
+ res.reason = ["The audio duration is too long."]
+ return res
+
+
+if __name__ == "__main__":
+ data = Data(data_id="1", content=r"../test/data/audio/test.wav")
+ res = RuleAudioDuration().eval(data)
+ print(res)
diff --git a/dingo/model/rule/rule_common.py b/dingo/model/rule/rule_common.py
index 28fc4204..419053e0 100644
--- a/dingo/model/rule/rule_common.py
+++ b/dingo/model/rule/rule_common.py
@@ -140,6 +140,48 @@ def eval(cls, input_data: Data) -> ModelRes:
return res
+@Model.rule_register(
+ "QUALITY_BAD_EFFECTIVENESS",
+ [
+ "multi_lan_ar",
+ "multi_lan_ko",
+ "multi_lan_ru",
+ "multi_lan_th",
+ "multi_lan_vi",
+ "multi_lan_cs",
+ "multi_lan_hu",
+ "multi_lan_sr",
+ ]
+)
+class RuleAudioDataFormat(BaseRule):
+ """check whether the audio data format is right"""
+
+ # Metadata for documentation generation
+ _metric_info = {
+ "category": "Rule-Based TEXT Quality Metrics",
+ "quality_dimension": "EFFECTIVENESS",
+ "metric_name": "RuleAudioDataFormat",
+ "description": "Check whether the audio data format is right",
+ "evaluation_results": ""
+ }
+
+ dynamic_config = EvaluatorRuleArgs()
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ res = ModelRes()
+
+ raw_data = input_data.raw_data
+ key_list = ["id", "audio", "text"]
+ if all(key in raw_data for key in key_list):
+ return res
+ else:
+ res.error_status = True
+ res.type = cls.metric_type
+ res.name = cls.__name__
+ res.reason = ["Audio Data format error"]
+
+
@Model.rule_register("QUALITY_BAD_UNDERSTANDABILITY", ["pretrain"])
class RuleCapitalWords(BaseRule):
"""check whether capital words ratio > 0.2"""
@@ -1125,6 +1167,48 @@ def eval(cls, input_data: Data) -> ModelRes:
return res
+@Model.rule_register(
+ "QUALITY_BAD_EFFECTIVENESS",
+ [
+ "multi_lan_ar",
+ "multi_lan_ko",
+ "multi_lan_ru",
+ "multi_lan_th",
+ "multi_lan_vi",
+ "multi_lan_cs",
+ "multi_lan_hu",
+ "multi_lan_sr",
+ ]
+)
+class RuleImageDataFormat(BaseRule):
+ """check whether the nlp data format is right"""
+
+ # Metadata for documentation generation
+ _metric_info = {
+ "category": "Rule-Based TEXT Quality Metrics",
+ "quality_dimension": "EFFECTIVENESS",
+ "metric_name": "RuleImageDataFormat",
+ "description": "Check whether the image data format is right",
+ "evaluation_results": ""
+ }
+
+ dynamic_config = EvaluatorRuleArgs()
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ res = ModelRes()
+
+ raw_data = input_data.raw_data
+ key_list = ["img_id", "image"]
+ if all(key in raw_data for key in key_list):
+ return res
+ else:
+ res.error_status = True
+ res.type = cls.metric_type
+ res.name = cls.__name__
+ res.reason = ["Image Data format error"]
+
+
@Model.rule_register("QUALITY_BAD_EFFECTIVENESS", ["pdf_all"])
class RuleLatexSpecialChar(BaseRule):
"""check pdf content latex abnormal char."""
@@ -1441,6 +1525,48 @@ def eval(cls, input_data: Data) -> ModelRes:
return res
+@Model.rule_register(
+ "QUALITY_BAD_EFFECTIVENESS",
+ [
+ "multi_lan_ar",
+ "multi_lan_ko",
+ "multi_lan_ru",
+ "multi_lan_th",
+ "multi_lan_vi",
+ "multi_lan_cs",
+ "multi_lan_hu",
+ "multi_lan_sr",
+ ]
+)
+class RuleNlpDataFormat(BaseRule):
+ """check whether the nlp data format is right"""
+
+ # Metadata for documentation generation
+ _metric_info = {
+ "category": "Rule-Based TEXT Quality Metrics",
+ "quality_dimension": "EFFECTIVENESS",
+ "metric_name": "RuleNlpDataFormat",
+ "description": "Check whether the nlp data format is right",
+ "evaluation_results": ""
+ }
+
+ dynamic_config = EvaluatorRuleArgs()
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ res = ModelRes()
+
+ raw_data = input_data.raw_data
+ key_list = ["track_id", "content"]
+ if all(key in raw_data for key in key_list):
+ return res
+ else:
+ res.error_status = True
+ res.type = cls.metric_type
+ res.name = cls.__name__
+ res.reason = ["NLP Data format error"]
+
+
@Model.rule_register(
"QUALITY_BAD_FLUENCY",
[
@@ -1472,7 +1598,7 @@ class RuleNoPunc(BaseRule):
"paper_title": "RedPajama: an Open Dataset for Training Large Language Models",
"paper_url": "https://github.com/togethercomputer/RedPajama-Data",
"paper_authors": "Together Computer, 2023",
- "evaluation_results": "docs/eval/rule/slimpajama_data_evaluated_by_rule.md"
+ "evaluation_results": ""
}
dynamic_config = EvaluatorRuleArgs(threshold=112)
@@ -1568,6 +1694,48 @@ def eval(cls, input_data: Data) -> ModelRes:
return res
+@Model.rule_register(
+ "QUALITY_BAD_EFFECTIVENESS",
+ [
+ "multi_lan_ar",
+ "multi_lan_ko",
+ "multi_lan_ru",
+ "multi_lan_th",
+ "multi_lan_vi",
+ "multi_lan_cs",
+ "multi_lan_hu",
+ "multi_lan_sr",
+ ]
+)
+class RuleSftDataFormat(BaseRule):
+ """check whether the nlp data format is right"""
+
+ # Metadata for documentation generation
+ _metric_info = {
+ "category": "Rule-Based TEXT Quality Metrics",
+ "quality_dimension": "EFFECTIVENESS",
+ "metric_name": "RuleSftDataFormat",
+ "description": "Check whether the sft data format is right",
+ "evaluation_results": ""
+ }
+
+ dynamic_config = EvaluatorRuleArgs()
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ res = ModelRes()
+
+ raw_data = input_data.raw_data
+ key_list = ["track_id", "type", "prompt", "completion"]
+ if all(key in raw_data for key in key_list):
+ return res
+ else:
+ res.error_status = True
+ res.type = cls.metric_type
+ res.name = cls.__name__
+ res.reason = ["SFT Data format error"]
+
+
@Model.rule_register(
"QUALITY_BAD_EFFECTIVENESS",
[
@@ -1856,6 +2024,48 @@ def eval(cls, input_data: Data) -> ModelRes:
return res
+@Model.rule_register(
+ "QUALITY_BAD_EFFECTIVENESS",
+ [
+ "multi_lan_ar",
+ "multi_lan_ko",
+ "multi_lan_ru",
+ "multi_lan_th",
+ "multi_lan_vi",
+ "multi_lan_cs",
+ "multi_lan_hu",
+ "multi_lan_sr",
+ ]
+)
+class RuleVedioDataFormat(BaseRule):
+ """check whether the vedio data format is right"""
+
+ # Metadata for documentation generation
+ _metric_info = {
+ "category": "Rule-Based TEXT Quality Metrics",
+ "quality_dimension": "EFFECTIVENESS",
+ "metric_name": "RuleVedioDataFormat",
+ "description": "Check whether the vedio data format is right",
+ "evaluation_results": ""
+ }
+
+ dynamic_config = EvaluatorRuleArgs()
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ res = ModelRes()
+
+ raw_data = input_data.raw_data
+ key_list = ["id", "video", "text"]
+ if all(key in raw_data for key in key_list):
+ return res
+ else:
+ res.error_status = True
+ res.type = cls.metric_type
+ res.name = cls.__name__
+ res.reason = ["Vedio Data format error"]
+
+
@Model.rule_register(
"QUALITY_BAD_EFFECTIVENESS",
[
diff --git a/dingo/model/rule/rule_image.py b/dingo/model/rule/rule_image.py
index 8e8c96b1..148782f3 100644
--- a/dingo/model/rule/rule_image.py
+++ b/dingo/model/rule/rule_image.py
@@ -312,6 +312,46 @@ def eval(cls, input_data: Data) -> ModelRes:
)
+@Model.rule_register("QUALITY_BAD_IMG_LABEL_OVERLAP", [])
+class RuleImageLabelOverlap(BaseRule):
+ _metric_info = {
+ "category": "Rule-Based IMG Quality Metrics",
+ "quality_dimension": "IMG_LABEL_OVERLAP",
+ "metric_name": "RuleImageLabelOverlap",
+ "description": "", # TODO: lindong input
+ "paper_title": "",
+ "paper_url": "",
+ "paper_authors": "",
+ "evaluation_results": ""
+ }
+
+ dynamic_config = EvaluatorRuleArgs()
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ pass
+
+
+@Model.rule_register("QUALITY_BAD_IMG_LABEL_VISUALIZATION", [])
+class RuleImageLabelVisualization(BaseRule):
+ _metric_info = {
+ "category": "Rule-Based IMG Quality Metrics",
+ "quality_dimension": "IMG_LABEL_VISUALIZATION",
+ "metric_name": "RuleImageLabelVisualization",
+ "description": "", # TODO: lindong input
+ "paper_title": "",
+ "paper_url": "",
+ "paper_authors": "",
+ "evaluation_results": ""
+ }
+
+ dynamic_config = EvaluatorRuleArgs()
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ pass
+
+
if __name__ == "__main__":
data = Data(
data_id='1',
diff --git a/dingo/run/vsl.py b/dingo/run/vsl.py
index a17f1967..8d9abbe0 100644
--- a/dingo/run/vsl.py
+++ b/dingo/run/vsl.py
@@ -59,36 +59,68 @@ def create_data_source(root_path, summary_data, folder_structure, evaluation_det
}
-def inject_data_to_html(html_path, data_source):
- # 生成新的HTML文件名
- timestamp = int(time.time())
- new_html_filename = f"index_{timestamp}.static.html"
- new_html_path = os.path.join(os.path.dirname(html_path), new_html_filename)
+def inject_data_to_html(html_path, data_source, output_filename=None, add_back_button=False):
+ """
+ 通用的数据注入HTML方法
+
+ Args:
+ html_path: 基础HTML模板路径
+ data_source: 要注入的数据
+ output_filename: 输出文件名,如果为None则自动生成
+ add_back_button: 是否添加返回按钮
+
+ Returns:
+ 生成的HTML文件名
+ """
+ web_static_dir = os.path.dirname(html_path)
+
+ # 生成输出文件名
+ if output_filename is None:
+ timestamp = int(time.time())
+ output_filename = f"index_{timestamp}.static.html"
+
+ output_path = os.path.join(web_static_dir, output_filename)
- # 复制原始HTML文件
- shutil.copy2(html_path, new_html_path)
+ # 复制基础HTML文件
+ shutil.copy2(html_path, output_path)
- # 读取新的HTML文件内容
- with open(new_html_path, 'r', encoding='utf-8') as file:
+ # 读取HTML内容
+ with open(output_path, 'r', encoding='utf-8') as file:
content = file.read()
+ # 准备注入的脚本
json_data = json.dumps(data_source, ensure_ascii=False)
encoded_data = base64.b64encode(json_data.encode('utf-8')).decode('utf-8')
script = f"""
- """
-
- # 注入数据到新的HTML文件
+ """
+
+ # 添加返回按钮(如果需要)
+ back_button = ""
+ if add_back_button:
+ back_button = f"""
+
+ """
+
+ # 注入脚本和返回按钮
head_pattern = re.compile(r'( )', re.IGNORECASE)
- modified_content = head_pattern.sub(r'\1\n' + script, content, count=1)
+ content = head_pattern.sub(r'\1\n' + script, content, count=1)
- with open(new_html_path, 'w', encoding='utf-8') as file:
- file.write(modified_content)
+ if back_button:
+ body_pattern = re.compile(r'()', re.IGNORECASE)
+ content = body_pattern.sub(r'\1\n' + back_button, content, count=1)
- print(f"Data source injected into {new_html_path}")
- return new_html_filename
+ # 写入文件
+ with open(output_path, 'w', encoding='utf-8') as file:
+ file.write(content)
+
+ print(f"✅ Generated: {output_filename}")
+ return output_filename
def start_http_server(directory, port=8000):
@@ -99,6 +131,121 @@ def start_http_server(directory, port=8000):
return server
+def scan_subdirectories(root_path):
+ """扫描子目录,查找包含 summary.json 的目录"""
+ subdirs = []
+
+ if not os.path.exists(root_path):
+ return []
+
+ for item in os.listdir(root_path):
+ item_path = os.path.join(root_path, item)
+ if os.path.isdir(item_path):
+ summary_path = os.path.join(item_path, "summary.json")
+ if os.path.exists(summary_path):
+ try:
+ with open(summary_path, 'r') as f:
+ summary_data = json.load(f)
+ subdirs.append({
+ "name": item,
+ "path": item_path,
+ "summary": summary_data
+ })
+ except Exception as e:
+ print(f"Warning: Could not read summary.json in {item_path}: {e}")
+
+ return sorted(subdirs, key=lambda x: x["name"])
+
+
+def generate_subdir_html(subdir_path, subdir_name, web_static_dir, base_html_path):
+ """为单个子目录生成HTML文件"""
+ try:
+ # 准备数据
+ folder_structure = get_folder_structure(subdir_path)
+ summary_data = get_summary_data(os.path.join(subdir_path, "summary.json"))
+ evaluation_details = get_evaluation_details(subdir_path)
+ data_source = create_data_source(subdir_path, summary_data, folder_structure, evaluation_details)
+
+ # 使用通用方法生成HTML
+ subdir_html_filename = f"{subdir_name}.html"
+ return inject_data_to_html(
+ html_path=base_html_path,
+ data_source=data_source,
+ output_filename=subdir_html_filename,
+ add_back_button=True
+ )
+
+ except Exception as e:
+ print(f"❌ Error generating HTML for {subdir_name}: {e}")
+ return None
+
+
+def cleanup_old_generated_files(web_static_dir, subdirs):
+ """清理旧的生成文件,避免冲突"""
+ try:
+ # 清理旧的子目录HTML文件
+ for subdir in subdirs:
+ old_file = os.path.join(web_static_dir, f"{subdir['name']}.html")
+ if os.path.exists(old_file):
+ os.remove(old_file)
+
+ # 清理旧的目录浏览器文件
+ import glob
+ old_browser_files = glob.glob(os.path.join(web_static_dir, "directory-browser-*.html"))
+ for old_file in old_browser_files:
+ try:
+ os.remove(old_file)
+ print(f"🗑️ Cleaned up old browser file: {os.path.basename(old_file)}")
+ except Exception:
+ pass
+
+ except Exception as e:
+ print(f"Warning: Could not cleanup old files: {e}")
+
+
+def generate_index_html(root_path, subdirs, web_static_dir, base_html_path):
+ """生成主目录页面"""
+ # 使用专门的目录浏览器模板
+ browser_template_path = os.path.join(web_static_dir, "directory-browser.html")
+
+ if not os.path.exists(browser_template_path):
+ print(f"Error: directory-browser.html template not found at '{browser_template_path}'.")
+ return None
+
+ # 读取模板文件
+ with open(browser_template_path, 'r', encoding='utf-8') as f:
+ template_content = f.read()
+
+ # 准备数据
+ directory_data = {
+ "rootPath": root_path,
+ "directories": subdirs
+ }
+
+ # 注入数据到模板
+ json_data = json.dumps(directory_data, ensure_ascii=False, indent=2)
+ encoded_data = base64.b64encode(json_data.encode('utf-8')).decode('utf-8')
+
+ script = f""""""
+
+ # 插入数据脚本
+ head_pattern = re.compile(r'()', re.IGNORECASE)
+ content = head_pattern.sub(r'\1\n' + script, template_content, count=1)
+
+ # 生成目录浏览器文件,不覆盖原始index.html
+ timestamp = int(time.time())
+ browser_html_filename = f"directory-browser-{timestamp}.html"
+ browser_html_path = os.path.join(web_static_dir, browser_html_filename)
+
+ with open(browser_html_path, 'w', encoding='utf-8') as f:
+ f.write(content)
+
+ print(f"✅ Generated: {browser_html_filename}")
+ return browser_html_filename
+
+
def process_and_inject(root_path):
summary_path = os.path.join(root_path, "summary.json")
web_static_dir = os.path.join(os.path.dirname(__file__), "..", "..", "web-static")
@@ -108,28 +255,56 @@ def process_and_inject(root_path):
print(f"Error: The specified input path '{root_path}' does not exist.")
return False, None
- if not os.path.exists(summary_path):
- print(f"Error: summary.json not found in '{root_path}'.")
- return False, None
-
if not os.path.exists(html_path):
print(f"Error: index.html not found at '{html_path}'.")
return False, None
- folder_structure = get_folder_structure(root_path)
- summary_data = get_summary_data(summary_path)
- evaluation_details = get_evaluation_details(root_path)
- data_source = create_data_source(root_path, summary_data, folder_structure, evaluation_details)
+ if os.path.exists(summary_path):
+ # 这是单个评估结果目录(原有逻辑)
+ print(f"📊 Processing single evaluation result directory...")
+ folder_structure = get_folder_structure(root_path)
+ summary_data = get_summary_data(summary_path)
+ evaluation_details = get_evaluation_details(root_path)
+ data_source = create_data_source(root_path, summary_data, folder_structure, evaluation_details)
+
+ data_source["inputPath"] = root_path
+
+ new_html_filename = inject_data_to_html(html_path, data_source)
+
+ print("Data processing and injection completed successfully.")
+ print(f"Input path: {root_path}")
+ print(f"New HTML file created: {new_html_filename}")
+
+ return True, new_html_filename
+
+ else:
+ # 检查是否为包含多个子目录的根目录
+ subdirs = scan_subdirectories(root_path)
+
+ if subdirs:
+ # 这是包含多个评估结果的根目录
+ print(f"🔄 Found {len(subdirs)} evaluation result directories, generating static HTML files...")
+
+ # 清理旧的生成文件(可选)
+ cleanup_old_generated_files(web_static_dir, subdirs)
- data_source["inputPath"] = root_path
+ # 为每个子目录生成HTML文件
+ generated_files = []
+ for subdir in subdirs:
+ html_file = generate_subdir_html(subdir["path"], subdir["name"], web_static_dir, html_path)
+ if html_file:
+ generated_files.append(html_file)
- new_html_filename = inject_data_to_html(html_path, data_source)
+ # 生成主目录页面
+ index_file = generate_index_html(root_path, subdirs, web_static_dir, html_path)
- print("Data processing and injection completed successfully.")
- print(f"Input path: {root_path}")
- print(f"New HTML file created: {new_html_filename}")
+ print(f"✅ Generated {len(generated_files)} result pages and 1 index page")
+ print(f"📁 Main page: {index_file}")
- return True, new_html_filename
+ return True, index_file
+ else:
+ print(f"Error: No summary.json found in '{root_path}' and no valid subdirectories found.")
+ return False, None
def run_visual_app(input_path=None):
diff --git a/docs/artimuse.md b/docs/artimuse.md
index dc544de2..68f69809 100644
--- a/docs/artimuse.md
+++ b/docs/artimuse.md
@@ -10,9 +10,9 @@ RuleImageArtimuse 基于 ArtiMuse 在线服务对输入图片进行美学质量
本文档的测试图片均由 Google Gemini 2.5 Flash Image(社区常称 “nano‑banana”)按提示词生成,后经人工筛选整理并托管在 OpenXLab;完整清单见 [test/data/artimuse/test_artimuse_nano_banana.jsonl](../test/data/artimuse/test_artimuse_nano_banana.jsonl)。我们将这批样例汇总为迷你集合 nano_banana,覆盖人像、室内、产品、电商、插画等多种风格,便于快速复现。
-在仓库根目录运行 `python [examples/artimuse/artimuse.py](../examples/artimuse/artimuse.py)` 可完成评估;如设置 `output_path`,将在该目录生成带时间戳与短 ID 的子目录,包含 `summary.json` 与逐条明细。可用 `python -m dingo.run.vsl --input <输出目录>` 打开可视化页面。
+在仓库根目录运行 `python examples/artimuse/artimuse.py`([examples/artimuse/artimuse.py](../examples/artimuse/artimuse.py))可完成评估;如设置 `output_path`,将在该目录生成带时间戳与短 ID 的子目录,包含 `summary.json` 与逐条明细。可用 `python -m dingo.run.vsl --input <输出目录>` 打开可视化页面。
-判定基于 `data.score_overall` 与阈值 `threshold`:低于阈值为 BadImage,否则为 GoodImage;服务端 `data` 原样写入 `reason[0]` 便于溯源。结合 nano_banana 的样例,低分多见于贴纸或合成画面写实性不足、Logo/文字遮挡主体、风格迁移过强导致色彩与细节失真、截图噪声多而缺乏摄影要素、纯 Logo 缺少摄影主体、以及过度后期造成的不自然等情况;应尽量突出主体、控制曝光与清晰度、减少压缩与过重滤镜、移除干扰元素,并保持整体风格一致。
+我们的判定是基于 `data.score_overall` 与阈值 `threshold`的,如果低于阈值那么就是 BadImage,否则为 GoodImage;服务端 `data` 原样写入 `reason[0]` 便于溯源。并且,结合 nano_banana 的样例,低分多见于贴纸或合成画面写实性不足、Logo/文字遮挡主体、风格迁移过强导致色彩与细节失真、截图噪声多而缺乏摄影要素、纯 Logo 缺少摄影主体、以及过度后期造成的不自然等情况;应尽量突出主体、控制曝光与清晰度、减少压缩与过重滤镜、移除干扰元素,并保持整体风格一致。
diff --git a/docs/config.md b/docs/config.md
index 289d4314..8152f014 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -2,130 +2,231 @@
`Dingo` 为不同模块设置了各自的配置,让用户可以更加自由地使用项目完成自身的质检需求。
-## Cli Config
-
-用户在命令行输入指令启动项目时会使用到的参数,本质是为了实例化`InputArgs`类:
-
-| Parameter | Type | Default | Required | Description |
-|---------------------------|------|:--------------------------------:|:--------:|----------------------------------------------------------------------------------------------|
-| --task_name / -n | str | "dingo" | No | task name. |
-| --eval_group / -e | str | "" | Yes | Eval models, can be specified multiple times like '-e default' or '-e pretrain' |
-| --input_path / -i | str | "test/data/test_local_json.json" | Yes | file or directory path to check. |
-| --output_path | str | "outputs/" | No | output path of result. |
-| --save_data | bool | False | No | whether save results into files. |
-| --save_correct | bool | False | No | whether save correct data. |
-| --save_raw | bool | False | No | whether save raw data. |
-| --start_index | int | 0 | No | the number of data start to check. |
-| --end_index | int | -1 | No | the number of data end to check. if it's negative, include the data from start_index to end. |
-| --max_workers | int | 1 | No | the number of max workers to concurrent check. |
-| --batch_size | int | 1 | No | the number of max data for concurrent check. |
-| --dataset | str | "hugging_face" | Yes | dataset type, in ['hugging_face', 'local'] |
-| --data_format | str | "json" | Yes | data format, such as: ['json', 'jsonl', 'plaintext', 'listjson']. |
-| --huggingface_split | str | "" | No | Huggingface split, default is 'train' |
-| --huggingface_config_name | str | None | No | Huggingface config name |
-| --column_id | str | "" | Depends | Column name of id in the input file. If exists multiple levels, use '.' separate |
-| --column_prompt | str | "" | Depends | Column name of prompt in the input file. If exists multiple levels, use '.' separate |
-| --column_content | str | "" | Yes | Column name of content in the input file. If exists multiple levels, use '.' separate |
-| --column_image | str | "" | Depends | Column name of image in the input file. If exists multiple levels, use '.' separate |
-| --custom_config | str | None | Depends | Custom config file path |
-| --log_level | str | "WARNING" | No | printing level of logs, in ['DEBUG', 'INFO', 'WARNING', 'ERROR'] |
-
- ## SDK Config
-
-用户通过SDK方式启动项目时会使用到的参数,即`InputArgs`类:
-
-| Parameter | Type | Default | Required | Description |
-|-------------------------|-----------------------|:--------------------------------:|:--------:|----------------------------------------------------------------------------------------------|
-| task_name | str | "dingo" | No | task name . |
-| eval_group | str | "" | Yes | eval model. |
-| input_path | str | "test/data/test_local_json.json" | Yes | file or directory path to check. |
-| output_path | str | "outputs/" | No | output path of result. |
-| save_data | bool | False | No | whether save results into files. |
-| save_correct | bool | False | No | whether save correct data. |
-| save_raw | bool | False | No | whether save raw data. |
-| start_index | int | 0 | No | the number of data start to check. |
-| end_index | int | -1 | No | the number of data end to check. if it's negative, include the data from start_index to end. |
-| max_workers | int | 1 | No | the number of max workers to concurrent check. |
-| batch_size | int | 1 | No | the number of max data for concurrent check. |
-| dataset | str | "hugging_face" | Yes | dataset type, in ['hugging_face', 'local'] |
-| data_format | str | "json" | Yes | data format, such as: ['json', 'jsonl', 'plaintext', 'listjson']. |
-| huggingface_split | str | "" | No | Huggingface split |
-| huggingface_config_name | Optional[str] | None | No | Huggingface config name |
-| column_id | str | "" | Depends | Column name of id in the input file. If exists multiple levels, use '.' separate |
-| column_prompt | str | "" | Depends | Column name of prompt in the input file. If exists multiple levels, use '.' separate |
-| column_content | str | "" | Yes | Column name of content in the input file. If exists multiple levels, use '.' separate |
-| column_image | str | "" | Depends | Column name of image in the input file. If exists multiple levels, use '.' separate |
-| custom_config | Optional[str \| dict] | None | Depends | custom config, file path or dict |
-| log_level | str | "WARNING" | No | printing level of logs, in ['DEBUG', 'INFO', 'WARNING', 'ERROR'] |
-
-## Custom Config
-
-`Dingo` 通过启发式规则、第三方质量检测工具或服务以及大型模型,使用户能够个性化他们的数据质量检查方法。这些能力可以通过配置来实现。
-进一步来说,就是使用上述配置项中提到的 `custom_config` 的参数,该参数指向配置文件路径或字典。如果所指向的是文件,那么文件中仅包含一个json格式
-的数据,例如: [config_template.json](../test/config/config_template.json)
-
-| Parameter | Type | Description |
-|-----------------|------|----------------------------------------------------------|
-| rule_list | list | choose these functions as a group to check data quality. |
-| prompt_list | list | choose these prompts as a group to check data quality. |
-| rule_config | dict | parameters related to rules and key is rule name. |
-| llm_config | dict | parameters related to llm and key is llm name. |
-| multi_turn_mode | str | choose parse mode for multi-turn dialogue. |
-
-`rule_list` 和 `prompt_list` 参数与上述提到的 `eval_group` 配合使用。
-如果 `eval_group` 已经内置,那 `rule_list` 和 `prompt_list` 则报错提示。
-如果 `eval_group` 没有内置,那么项目则根据 `rule_list` 和 `prompt_list` 罗列的规则与prompt进行质检。
-具体的使用方法,可以参考:[sdk_custom_rule.py](../examples/custom/sdk_custom_rule.py)、[sdk_custom_llm.py](../examples/custom/sdk_custom_llm.py)
-
-### rule_config
-
-启发式规则是数据处理和质量检查的常用方法,`Dingo` 已经实施了一系列启发式规则,并将其分为规则组,如 `pretrain` 和 `sft`。
-在配置文件的模板中,与启发式规则配置相关的项是 `rule_config` ,它的key是具体的规则名称。
-通过 `rule_config` 用户可以在不去修改源代码的情况下,动态的设置规则中的阈值、模式、关键词列表与引用路径。
-
-| Parameter | Type | Description |
-|--------------------|----------|------------------------------------------------------------|
-| threshold | float | rule uses the number to decide. |
-| pattern | string | rule uses the character string to match. |
-| key_list | list | rule uses these keys to match. |
-| refer_path | list | rule loads the file content or small models. |
-
-### llm_config
-
-`Dingo` 在进行大模型质检时,一些必要的配置是无法避免的,比如密钥、链接等。但是考虑到隐私与安全问题,用户需要自行设置且对他人保密。、
-所以上述的 `llm_config` 参数就显得十分必要,它的key是项目注册的大语言模型,如 `openai`。
-
-| Parameter | Type | Description |
-|------------|------|-----------------------------------------------------|
-| model | list | llm uses which model. |
-| key | list | llm uses the key to verify identity. |
-| api_url | list | llm uses the url to access the model. |
-| parameters | dict | llm uses the parameters to tune LLM configurations. |
-
-#### parameters
-
-`temperature` 数字类型,可选。默认为 1。要使用的采样温度(temperature),介于 0 和 2 之间。
-我们通常建议只修改此参数或 top_p 一个参数而不是两个同时修改。
-
-`top_p` 数字类型,可选。默认为 1。
-我们通常建议只修改此参数或 temperature 一个参数而不是两个同时修改。
-
-`max_tokens` 整数类型,可选。默认为 4000。要生成的最大令牌数。
-
-`presence_penalty` 数字类型,可选。默认为 0。介于 -2.0 和 2.0 之间的数字。
-
-`frequency_penalty` 数字类型,可选。默认为 0。范围在 -2.0 到 2.0 之间的数字。
-
-更多参数细节可参考OpenAI API官方文档。
-
-### multi_turn_mode
-
-`Dingo` 支持多轮对话数据质检,如MT-Bench、MT-Bench++和MT-Bench101,其中包含多轮对话质检的解析模式。
-
-| Parameter | Type | Description |
-|-----------|------|-------------------------------------------|
-| all | str | concat all turns in multi-turn dialogues. |
-
-具体的使用方法,可以参考:
+## CLI Config
+
+用户在命令行输入指令启动项目时只需要指定配置文件路径:
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-----------------------|
+| --input / -i | str | None | Yes | 配置文件路径 |
+
+## 配置文件结构
+
+配置文件采用 JSON 格式,包含以下主要结构:
+
+### InputArgs 根配置
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-------------|
+| task_name | str | "dingo" | No | 任务名称 |
+| input_path | str | "test/data/test_local_json.json" | Yes | 要检查的文件或目录路径 |
+| output_path | str | "outputs/" | No | 结果输出路径 |
+| log_level | str | "WARNING" | No | 日志级别,可选值:['DEBUG', 'INFO', 'WARNING', 'ERROR'] |
+| use_browser | bool | false | No | 是否使用浏览器进行可视化 |
+
+### Dataset 配置 (dataset)
+
+数据集相关配置:
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-------------|
+| source | str | "hugging_face" | Yes | 数据源类型,可选值:['hugging_face', 'local'] |
+| format | str | "json" | Yes | 数据格式,可选值:['json', 'jsonl', 'plaintext', 'listjson'] |
+| field | object | - | Yes | 字段映射配置 |
+| hf_config | object | - | No | HuggingFace 特定配置 |
+
+#### DatasetField 配置 (dataset.field)
+
+字段映射配置:
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-------------|
+| id | str | "" | Depends | ID 字段名,多级用 '.' 分隔 |
+| prompt | str | "" | Depends | prompt 字段名,多级用 '.' 分隔 |
+| content | str | "" | Yes | 内容字段名,多级用 '.' 分隔 |
+| context | str | "" | Depends | 上下文字段名,多级用 '.' 分隔 |
+| image | str | "" | Depends | 图像字段名,多级用 '.' 分隔 |
+
+#### DatasetHFConfig 配置 (dataset.hf_config)
+
+HuggingFace 特定配置:
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-------------|
+| huggingface_split | str | "" | No | HuggingFace 数据集分割 |
+| huggingface_config_name | str | null | No | HuggingFace 配置名称 |
+
+### Executor 配置 (executor)
+
+执行器相关配置:
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-------------|
+| eval_group | str | "" | Yes | 评估模型组 |
+| rule_list | list | [] | Depends | 规则函数列表 |
+| prompt_list | list | [] | Depends | prompt 列表 |
+| start_index | int | 0 | No | 开始检查的数据索引 |
+| end_index | int | -1 | No | 结束检查的数据索引 |
+| max_workers | int | 1 | No | 最大并发工作线程数 |
+| batch_size | int | 1 | No | 并发检查的最大数据量 |
+| multi_turn_mode | str | null | No | 多轮对话解析模式 |
+| result_save | object | - | No | 结果保存配置 |
+
+#### ExecutorResultSave 配置 (executor.result_save)
+
+结果保存配置:
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-------------|
+| bad | bool | false | No | 是否保存错误结果 |
+| good | bool | false | No | 是否保存正确结果 |
+| raw | bool | false | No | 是否保存原始数据 |
+
+### Evaluator 配置 (evaluator)
+
+评估器相关配置:
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-------------|
+| rule_config | object | {} | Depends | 规则配置 |
+| llm_config | object | {} | Depends | LLM 配置 |
+
+#### EvaluatorRuleArgs 配置 (evaluator.rule_config.[rule_name])
+
+规则配置:
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-------------|
+| threshold | float | null | No | 规则决策阈值 |
+| pattern | str | null | No | 匹配模式字符串 |
+| key_list | list | null | No | 匹配关键词列表 |
+| refer_path | list | null | No | 参考文件路径或小模型路径 |
+
+#### EvaluatorLLMArgs 配置 (evaluator.llm_config.[llm_name])
+
+LLM 配置:
+
+| Parameter | Type | Default | Required | Description |
+|-----------|------|---------|----------|-------------|
+| model | str | null | No | 使用的模型名称 |
+| key | str | null | No | API 密钥 |
+| api_url | str | null | No | API URL |
+| parameters | object | null | No | LLM 调参配置 |
+
+##### LLM Parameters 配置
+
+LLM 调参配置:
+
+| Parameter | Type | Default | Description |
+|-----------|------|---------|-------------|
+| temperature | number | 1 | 采样温度,0-2之间 |
+| top_p | number | 1 | 核心采样概率 |
+| max_tokens | number | 4000 | 最大生成token数 |
+| presence_penalty | number | 0 | 存在惩罚,-2.0到2.0之间 |
+| frequency_penalty | number | 0 | 频率惩罚,-2.0到2.0之间 |
+
+## 配置文件示例
+
+```json
+{
+ "task_name": "dingo",
+ "input_path": "test/data/test_local_json.json",
+ "output_path": "outputs/",
+ "log_level": "WARNING",
+ "use_browser": false,
+
+ "dataset": {
+ "source": "hugging_face",
+ "format": "json",
+ "field": {
+ "id": "",
+ "prompt": "",
+ "content": "",
+ "context": "",
+ "image": ""
+ },
+ "hf_config": {
+ "huggingface_split": "",
+ "huggingface_config_name": null
+ }
+ },
+
+ "executor": {
+ "eval_group": "",
+ "rule_list": [],
+ "prompt_list": [],
+ "start_index": 0,
+ "end_index": -1,
+ "max_workers": 1,
+ "batch_size": 1,
+ "multi_turn_mode": null,
+ "result_save": {
+ "bad": false,
+ "good": false,
+ "raw": false
+ }
+ },
+
+ "evaluator": {
+ "rule_config": {
+ "rule_name": {
+ "threshold": 0.5,
+ "pattern": ".*",
+ "key_list": ["key1", "key2"],
+ "refer_path": ["path/to/reference"]
+ }
+ },
+ "llm_config": {
+ "openai": {
+ "model": "gpt-3.5-turbo",
+ "key": "your-api-key",
+ "api_url": "https://api.openai.com/v1/chat/completions",
+ "parameters": {
+ "temperature": 1,
+ "top_p": 1,
+ "max_tokens": 4000,
+ "presence_penalty": 0,
+ "frequency_penalty": 0
+ }
+ }
+ }
+ }
+}
+```
+
+## 使用方式
+
+### CLI 方式
+```bash
+dingo --input config.json
+```
+
+### SDK 方式
+```python
+from dingo import InputArgs, run
+
+# 从文件加载配置
+config = InputArgs.parse_file("config.json")
+run(config)
+
+# 或从字典创建配置
+config_dict = {
+ "task_name": "my_task",
+ "input_path": "data.json",
+ # ... 其他配置
+}
+config = InputArgs(**config_dict)
+run(config)
+```
+
+## 多轮对话模式
+
+`Dingo` 支持多轮对话数据质检,如MT-Bench、MT-Bench++和MT-Bench101:
+
+| Mode | Description |
+|------|-------------|
+| all | 拼接多轮对话中的所有回合 |
+
+具体使用方法请参考相关示例文件:
[sdk_mtbench101_rule_all.py](../examples/multi_turn_dialogues/sdk_mtbench101_rule_all.py)、[sdk_mtbench101_llm.py](../examples/multi_turn_dialogues/sdk_mtbench101_llm.py)、
[sdk_mtbench_rule_all.py](../examples/multi_turn_dialogues/sdk_mtbench_rule_all.py)、[sdk_mtbench_llm.py](../examples/multi_turn_dialogues/sdk_mtbench_llm.py)。
diff --git a/docs/factcheck_guide.md b/docs/factcheck_guide.md
index 48a50563..c11d52f4 100644
--- a/docs/factcheck_guide.md
+++ b/docs/factcheck_guide.md
@@ -221,7 +221,6 @@ dingo/
│ └── prompt_factcheck.py # 评估提示词
└── examples/
└── factcheck/
- ├── factcheck_demo.py # 单条评估示例
└── dataset_factcheck_evaluation.py # 数据集评估示例
```
diff --git a/docs/hallucination_guide.md b/docs/hallucination_guide.md
index dd498761..4cc863ef 100644
--- a/docs/hallucination_guide.md
+++ b/docs/hallucination_guide.md
@@ -136,18 +136,31 @@ from dingo.config import InputArgs
from dingo.exec import Executor
input_data = {
- "input_path": "your_dataset.jsonl",
- "data_format": "jsonl",
- "dataset": "local",
- "custom_config": {
+ "input_path": str(Path("test/data/hallucination_test.jsonl")),
+ "output_path": "output/hhem_evaluation/",
+ "dataset": {
+ "source": "local",
+ "format": "jsonl",
+ "field": {
+ "prompt": "prompt",
+ "content": "content",
+ "context": "context",
+ }
+ },
+ "executor": {
+ "rule_list": ["RuleHallucinationHHEM"], # Use HHEM rule instead of LLM
+ "result_save": {
+ "bad": True,
+ "good": True # Also save good examples for comparison
+ }
+ },
+ "evaluator": {
"rule_config": {
- "RuleHallucinationHHEM": { # 使用 HHEM 模型
- "threshold": 0.5
+ "RuleHallucinationHHEM": {
+ "threshold": 0.5 # Default threshold (0.0-1.0, higher = more strict)
}
}
- },
- "save_data": True,
- "output_dir": "output/hhem_hallucination_check"
+ }
}
input_args = InputArgs(**input_data)
@@ -164,28 +177,40 @@ from dingo.config import InputArgs
from dingo.exec import Executor
input_data = {
- "input_path": "your_dataset.jsonl",
- "data_format": "jsonl",
- "dataset": "local",
- "eval_group": "sft", # 使用包含幻觉检测的评估组
- "custom_config": {
- "prompt_list": ["QUALITY_BAD_HALLUCINATION"], # 仅运行幻觉检测
+ "input_path": "test/data/hallucination_test.jsonl", # Your JSONL file path
+ "output_path": "output/hallucination_evaluation/",
+ "dataset": {
+ "source": "local",
+ "format": "jsonl",
+ "field": {
+ "prompt": "prompt",
+ "content": "content",
+ "context": "context",
+ }
+ },
+ "executor": {
+ "prompt_list": ["PromptHallucination"],
+ "result_save": {
+ "bad": True
+ }
+ },
+ "evaluator": {
"llm_config": {
"LLMHallucination": {
- "model": "gpt-4o",
- "key": "YOUR_OPENAI_API_KEY",
- "api_url": "https://api.openai.com/v1/chat/completions"
+ "model": "deepseek-chat",
+ "key": "Your API Key",
+ "api_url": "https://api.deepseek.com/v1"
}
}
- },
- "save_data": True,
- "output_dir": "output/gpt_hallucination_check"
+ }
}
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
result = executor.execute()
+print(result)
+
print(f"GPT 幻觉检测完成: 发现 {result.bad_count}/{result.total_count} 个问题")
```
diff --git a/docs/metrics.md b/docs/metrics.md
index 89e7695b..0edca996 100644
--- a/docs/metrics.md
+++ b/docs/metrics.md
@@ -41,7 +41,7 @@ This document provides comprehensive information about all quality metrics used
| Type | Metric | Description | Paper Source | Evaluation Results |
|------|--------|-------------|--------------|-------------------|
| `QUALITY_BAD_COMPLETENESS` | RuleLineEndWithEllipsis, RuleLineEndWithTerminal, RuleSentenceNumber, RuleWordNumber | Checks whether the ratio of lines ending with ellipsis is below threshold; Checks whether the ratio of lines ending w... | [RedPajama: an Open Dataset for Training Large Language Models](https://github.com/togethercomputer/RedPajama-Data) (Together Computer, 2023) | [📊 See Results](eval/rule/slimpajama_data_evaluated_by_rule.md) |
-| `QUALITY_BAD_EFFECTIVENESS` | RuleAbnormalChar, RuleAbnormalHtml, RuleAlphaWords, RuleCharNumber, RuleColonEnd, RuleContentNull, RuleContentShort, RuleContentShortMultiLan, RuleEnterAndSpace, RuleEnterMore, RuleEnterRatioMore, RuleHtmlEntity, RuleHtmlTag, RuleInvisibleChar, RuleLatexSpecialChar, RuleLineJavascriptCount, RuleLoremIpsum, RuleMeanWordLength, RuleSpaceMore, RuleSpecialCharacter, RuleStopWord, RuleSymbolWordRatio, RuleOnlyUrl | Detects garbled text and anti-crawling characters by combining special character and invisible character detection; D... | [RedPajama: an Open Dataset for Training Large Language Models](https://github.com/togethercomputer/RedPajama-Data) (Together Computer, 2023) | [📊 See Results](eval/rule/slimpajama_data_evaluated_by_rule.md) |
+| `QUALITY_BAD_EFFECTIVENESS` | RuleAbnormalChar, RuleAbnormalHtml, RuleAlphaWords, RuleAudioDataFormat, RuleCharNumber, RuleColonEnd, RuleContentNull, RuleContentShort, RuleContentShortMultiLan, RuleEnterAndSpace, RuleEnterMore, RuleEnterRatioMore, RuleHtmlEntity, RuleHtmlTag, RuleInvisibleChar, RuleImageDataFormat, RuleLatexSpecialChar, RuleLineJavascriptCount, RuleLoremIpsum, RuleMeanWordLength, RuleNlpDataFormat, RuleSftDataFormat, RuleSpaceMore, RuleSpecialCharacter, RuleStopWord, RuleSymbolWordRatio, RuleVedioDataFormat, RuleOnlyUrl | Detects garbled text and anti-crawling characters by combining special character and invisible character detection; D... | [RedPajama: an Open Dataset for Training Large Language Models](https://github.com/togethercomputer/RedPajama-Data) (Together Computer, 2023) | [📊 See Results](eval/rule/slimpajama_data_evaluated_by_rule.md) |
| `QUALITY_BAD_FLUENCY` | RuleAbnormalNumber, RuleCharSplit, RuleNoPunc, RuleWordSplit, RuleWordStuck | Checks PDF content for abnormal book page or index numbers that disrupt text flow; Checks PDF content for abnormal ch... | [RedPajama: an Open Dataset for Training Large Language Models](https://github.com/togethercomputer/RedPajama-Data) (Together Computer, 2023) | [📊 See Results](eval/rule/slimpajama_data_evaluated_by_rule.md) |
| `QUALITY_BAD_RELEVANCE` | RuleHeadWordAr, RuleHeadWordCs, RuleHeadWordHu, RuleHeadWordKo, RuleHeadWordRu, RuleHeadWordSr, RuleHeadWordTh, RuleHeadWordVi, RulePatternSearch, RuleWatermark | Checks whether Arabic content contains irrelevant tail source information; Checks whether Czech content contains irre... | [RedPajama: an Open Dataset for Training Large Language Models](https://github.com/togethercomputer/RedPajama-Data) (Together Computer, 2023) | [📊 See Results](eval/rule/slimpajama_data_evaluated_by_rule.md) |
| `QUALITY_BAD_SECURITY` | RuleIDCard, RuleUnsafeWords | Checks whether content contains ID card information; Checks whether content contains unsafe words | [RedPajama: an Open Dataset for Training Large Language Models](https://github.com/togethercomputer/RedPajama-Data) (Together Computer, 2023) | [📊 See Results](eval/rule/slimpajama_data_evaluated_by_rule.md) |
@@ -57,6 +57,19 @@ This document provides comprehensive information about all quality metrics used
| `QUALITY_BAD_IMG_RELEVANCE` | RuleImageTextSimilarity | Evaluates semantic similarity between image and text content using CLIP model | [Learning Transferable Visual Representations with Natural Language Supervision](https://arxiv.org/abs/2103.00020) (Radford et al., 2021) | N/A |
| `QUALITY_BAD_IMG_SIMILARITY` | RuleImageRepeat | Detects duplicate images using PHash and CNN methods to ensure data diversity | [ImageNet Classification with Deep Convolutional Neural Networks](https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf) (Krizhevsky et al., 2012) | N/A |
+### Audio Quality Metrics
+
+| Type | Metric | Description | Paper Source | Evaluation Results |
+|------|--------|-------------|--------------|-------------------|
+| `QUALITY_BAD_EFFECTIVENESS` | RuleAudioDuration | Check whether the audio duration meets the standard | Internal Implementation | N/A |
+| `QUALITY_BAD_EFFECTIVENESS` | RuleAudioSnrQuality | Check whether the audio signal-to-noise ratio meets the standard | Internal Implementation | N/A |
+
+### Document Parsing
+
+| Type | Metric | Description | Paper Source | Evaluation Results |
+|------|--------|-------------|--------------|-------------------|
+| `PromptDocumentParsingQuality` | PromptDocumentParsingQuality | Evaluate the quality of general document parsing | Internal Implementation | N/A |
+
### Factuality Assessment
| Type | Metric | Description | Paper Source | Evaluation Results |
diff --git a/docs/posts/artimuse_en.md b/docs/posts/artimuse_en.md
new file mode 100644
index 00000000..422f0c83
--- /dev/null
+++ b/docs/posts/artimuse_en.md
@@ -0,0 +1,61 @@
+# Content
+
+# We Tested It for You: nano banana Is Impressive — An "Aesthetic Blind Test" with Dingo × ArtiMuse
+
+Recently, everyone's been experimenting with nano banana's image generation capabilities, and we jumped on board too. But we didn't just look at "can it generate images?" — we cared more about "are these images actually good-looking, and why?"
+
+So our team used it as a sample factory — first generating a batch of different style images with nano banana, then having ArtiMuse provide overall scores + 8-dimensional critiques, with Dingo orchestrating the entire evaluation pipeline, unified threshold judgment, and finally producing an easy-to-understand visual report.
+
+## Why Dingo × ArtiMuse?
+
+ArtiMuse is essentially an aesthetic engine that "can see images and reason about them" — it doesn't just give you an overall score and leave. Instead, it breaks down an image into eight perspectives for explanation: composition, visual elements, technical execution, originality, theme expression, emotional response, gestalt completion, and comprehensive assessment. After seeing the scores, users can follow these dimensions to take action: where to crop, where to reduce elements, where to refine details — everything becomes crystal clear. To make this "reasoning ability" reliable, we created ArtiMuse-10K at a scale of 10,000 images, covering photography, painting, design, and AIGC. Each image has expert annotations with overall scores and eight-dimensional ratings. The subjects and styles are diverse enough that the learned model is adaptable and generalizes more stably. For scoring, we didn't take the old "classification → mapping" approach, but treated scores as continuous values (which can be understood as a Token-as-Score approach). The benefits are stability, repeatability, and the ability to distinguish subtle but critical differences. In actual comparisons, ArtiMuse shows higher correlation on common aesthetic datasets, and most importantly, it doesn't just tell users the score, but can clearly explain the reasoning behind that score, making image selection, review, and quality control easy to advance.
+
+[ArtiMuse QR Code (local)](../../../../../artimuse/ArtiMuse/assets/images/QRcode.jpg)
+
+In engineering practice, Dingo transforms this "aesthetic understanding" capability into a smooth pipeline: images are fed in, and the built-in RuleImageArtimuse creates tasks via HTTP and polls status at intervals. When tasks complete, it retrieves the score_overall, uses local thresholds (default 6) for unified Good/Bad judgment, while writing the server's fine-grained data directly into reason for later report display and issue tracking with clear evidence. When more comprehensive evaluation is needed, Dingo can also run other rules in parallel, such as directly flagging invalid dimensions when aspect ratio is greater than 4 or less than 0.25, using NIMA for clarity (common threshold 5.5), PHash + CNN for duplicate detection, and CLIP for image-text relevance scoring (can also switch to sentence-level embedding for more stability). With this complete setup, you get not just a score, but a systematic evidence chain and actionable improvement directions — standards are aligned, processes are fixed, and collaboration involves less friction.
+
+[Local file](../assets/dingo-logo.png)
+
+Without further ado, let's look at the results of this pop quiz. The results are straightforward: 20 samples total, default threshold of 6 points; 15 passed (75%), 5 rejected; end-to-end completion in about 2 minutes 6 seconds, averaging ≈6.3 seconds/image (mainly due to conservative polling intervals). High-scoring samples generally share characteristics of "clear subjects, natural lighting, detailed fidelity, clear narrative"; those judged as low-scoring mostly suffer from stickers/logos taking up too much screen space, over-stylization leading to detail loss, or overly flat composition resulting in insufficient visual tension.
+
+Let's examine how to measure the quality of each image through some "typical cases"!
+
+First, what catches our eye is the city in neon lights:
+
+
+
+It scored 7.73 total. ArtiMuse's evaluation: The image layers and visual flow are very clear: streets and buildings steadily guide the viewer's gaze toward the image center, with neon signs and reflections creating atmospheric feel; technically, exposure and sharpness are on point, with neon and wet road reflection details maxed out. The minor flaw is slightly bright hotspots — if the highlights were compressed a bit more, the completeness would be even higher.
+
+Then we see an elderly craftsman with his handicrafts:
+
+
+
+This image earned a high score of 7.42. Warm light falls on the craftsman and artifacts, with stable composition and established narrative. The background pottery is blurred but not chaotic, making it very pleasant to view. In ArtiMuse's assessment, this image not only performs well in theme expression but also excels in technical execution — precise focus, rich details, unified color tone; the only small regret is in "originality," where the subject matter is somewhat traditional with less surprise factor.
+
+The third and fourth images are some underperforming examples:
+
+
+
+Here's a super cute sticker bear for your desktop~ It scored 4.82 total. It's not poor image quality — on the contrary, the lines are clean and details are clear, but the problem lies in visual tension and gestalt: composition is too flat, layers are thin, decorative feel stronger than narrative, resulting in "looks cute, but lacks aesthetic depth." If it's for emoji stickers, it would be perfectly fine, but when placed in aesthetic scoring, unfortunately, it tends to suffer.
+
+The final example is a pure logo with minimalist graphics:
+
+
+
+It received a total score of 5.68. Very functional with good recognition, but naturally can't score high on "originality, emotional impact, and overall artistry" — this type of image is OK in "quality control/compliance" scenarios, but if considered as a "beautiful featured image," it has some disadvantages.
+
+If you also want to upgrade from "intuitive image selection" to "standardized selection," the logic of this combination is actually simple: ArtiMuse first breaks down each image into 8 dimensions to provide reasoning and scores, then feeds the total score back to Dingo; Dingo uses a unified threshold for Good/Bad judgment (default 6, easily adjustable), and also supports running other rules in parallel such as dimension validity, clarity (NIMA), duplicate detection, and image-text relevance, producing a comprehensive "multi-dimensional health report" in one go. Our own experience: image selection efficiency and communication costs drop dramatically — especially when teams need unified aesthetic standards.
+
+For specific parameters, here are some references: for external display and brand launches, it's recommended to set thresholds at 6.5–7, preferring quality over quantity; for content production/daily image selection, 5.8–6.2 offers a balance between efficiency and quality; for teaching or creative iteration, use 5.5–6 to retain more edge cases for "reverse practice." If you prioritize speed, you can also tighten polling intervals from 5 seconds to 2–3 seconds, with a 90-second upper limit, which will significantly compress total processing time.
+
+Here's a small checklist for easy reference:
+
+- **Want content publishing gates/brand quality control**: Enable ArtiMuse + clarity/dimension/duplicate/relevance quartet in Dingo, get reports on one page;
+
+- **Want large-batch image selection**: Set threshold to 6 first, publish Good ones, keep Bad ones for manual review or improvement lists;
+
+- **Want creative improvement/teaching feedback**: Pay more attention to ArtiMuse's dimensional critique excerpts, review following "composition/lighting/element reduction/narrative" four steps for rapid progress.
+
+**Immediate reproduction (open source repositories)**: Dingo (GitHub) https://github.com/MigoXLab/dingo | ArtiMuse (GitHub) https://github.com/thunderbolt215/ArtiMuse
+
+Note on sample sources: The examples above were generated/edited by nano banana, used solely for technical evaluation. Want to get our evaluation templates, rule configurations, and example scripts from this test? Comment or DM "Dingo Image Evaluation" and I'll send you the reproducible material package. We'll also continue updating comparison results for more styles (like "character consistency," "multi-image fusion," "product demonstrations"), making "beautiful" truly become a pipeline for your team.
diff --git a/docs/posts/artimuse_zh.md b/docs/posts/artimuse_zh.md
new file mode 100644
index 00000000..0ebee643
--- /dev/null
+++ b/docs/posts/artimuse_zh.md
@@ -0,0 +1,91 @@
+# 文案
+
+
+# 替你们试过了,nano banana 很能打——用Dingo × ArtiMuse 做一次“审美盲检”
+
+
+ 最近大家都在玩 nano banana 的出图能力,我们也上手了一把。但我们不只看“能不能生图”,更在意“这图到底好不好看、为什么好看”。
+
+
+ 于是我们的小队把它当做了一个样本工厂——先用 nano banana 生成一批不同风格的图片,再交给 ArtiMuse 给出总分 + 8 维点评,由 Dingo 把这一整套评测流程编排起来、统一阈值判定、最后出一页好懂的可视化报告。
+
+
+为什么用Dingo × ArtiMuse?
+
+
+ ArtiMuse 本质上是个“会看图、会讲理”的审美引擎——不是给完一个总分就溜了,而是把一张图拆成八个角度来解释:构图、视觉元素、技术执行、原创性、主题表达、情绪反应、完形成闭到综合评估。看完分数,用户就能顺着这些维度去下手:哪里要裁、哪里要减元素、哪里要把细节抠出来,一清二楚。为了让“会讲理”这件事靠谱,我们做了一个一万张规模的 ArtiMuse-10K,摄影、绘画、设计到 AIGC 都覆盖,每张图都有经验评审给了总分和八维标注,题材和风格都够杂,所以学出来不挑食,泛化更稳。打分这块我们没走“分档→映射”的老路,而是把分数当连续值来学(可以理解成 Token-as-Score 的思路),好处是稳定、可重复、能分清那些细微但关键的差别。实际对比下来,ArtiMuse 在常见美学数据集上的相关性更高,而且最关键的是不只告诉用户分数,还能把得到这个分数的原因讲明白,选图、复盘、质检都能实现轻松推进。
+
+
+[ArtiMuse 二维码(本地)](../../../../../artimuse/ArtiMuse/assets/images/QRcode.jpg)
+
+
+ 落到工程实践里,就轮到 Dingo 把这套“懂审美”的能力变成一条顺滑的流水线:图片喂进来,内置的 RuleImageArtimuse 通过 HTTP 先创建任务再按节奏轮询状态,任务完成就取回 score_overall,用本地的门槛(默认 6)统一判 Good/Bad,同时把服务端的细粒度 data 原样写进 reason,后面做报告展示和问题追溯都有据可查。需要更全面的时候,Dingo 还能把别的规则一并拉起来跑,比如宽高比大于 4 或小于 0.25 直接判无效尺寸,清晰度用 NIMA(常用门槛 5.5),重复检测走 PHash 加 CNN,图文相关性用 CLIP 做打分(也可以换成句级嵌入更稳)。这样一套下来,你拿到的不只是一个分,还有成体系的证据链和可执行的改进方向——标准对齐了,流程固定了,协作也更少扯皮。
+
+
+[本地文件](../assets/dingo-logo.png)
+
+
+ 话不多说,来看看这波随堂测试的成绩。结果很直观:共 20 张样本,默认阈值 6 分;通过 15 张(75%)、拦下 5 张;端到端约 2 分 06 秒跑完一批,平均 ≈6.3 秒/张(主要是轮询节奏保守)。高分样本普遍有“主体明确、光影自然、细节保真、叙事清晰”的共性;被判低分的,大多是贴纸/Logo 占画面过大、过度风格化导致细节丢失、或构图过平导致视觉张力不足。
+
+
+让我们通过一些“典型案例”,来看看如何来度量每一张图的好坏吧!
+
+
+首先映入眼帘的,是夜光中的城市
+
+
+
+
+
+ 它的总分为 7.73。我们的artimuse给出的评价是:它的画面层次和动线非常清晰:街道与建筑把视线稳稳引向画面中心,灯牌与反射撑起了氛围感;技术上曝光、清晰度都在线,霓虹与湿路的反光细节拉满。小瑕疵是热点略亮,若再压一点高光,完整度会更高。
+
+
+然后我们看到了一位手工艺品的匠人老爷爷
+
+
+
+
+
+ 这幅图得到了7.42的高分。暖光打在工匠与器物上,构图稳、故事立,背景的陶器虚而不乱,整体非常耐看。在artimuse看来,这张图片不仅主题表达表现不错,同时技术执行也做得十分不错,它对焦精准、细节丰富、色调统一;唯一的小小缺憾在于“原创性”,题材偏传统,惊喜感略少。
+
+
+第三张和第四张就是一些表现欠佳的图片了。
+
+
+
+
+
+ 先贴一张超可爱的贴纸小熊在你的桌面~它的总分是 4.82。它并非画质差,相反线条干净、细节清楚,但问题在视觉张力与完形:构图过平、层次单薄、装饰感强于叙事,导致“看着可爱,但审美深度不够”。如果是要做表情贴是完全没有问题的,但放在审美评分里,非常可惜,就容易吃亏。
+
+
+最后的例图就是一张纯 Logo的极简图形
+
+
+
+
+
+ 它获得的总分是 5.68。功能性很强、识别度也没问题,但在“原创性、情绪感染与整体艺术性”上自然拿不到高分——这类图在“质检/合规”场景里 OK,可如果作为一张“好看精选图”,那么就有一些不占优势。
+
+
+ 如果你也想把“凭感觉选图”升级成“有标准的选图”,这套组合的逻辑其实很简单:ArtiMuse 先把每张图拆成 8 个维度给出理由和分数,再把总分回填给 Dingo;Dingo 这边统一用一个阈值做 Good/Bad 的门槛(默认 6,可一键调整),还支持把尺寸有效性、清晰度(NIMA)、重复度、图文相关性这些规则并行拉起来,一次性出“多维体检卡”。我们自己的感受是:选图效率和沟通成本直线下降——尤其在团队需要统一审美标准的时候。
+
+
+ 对于一些具体的参数,在这里小编也给个参考:对外展示、品牌上线时建议把门槛调到 6.5–7,宁缺毋滥;内容生产/日更选图可以放在 5.8–6.2,效率与质量折中;教学或创作迭代则用 5.5–6,保留更多边缘样本来“反向练”。如果你更追求时效,也可以把轮询间隔从 5 秒收紧到 2–3 秒,再配一个 90 秒的上限,整批用时会明显压缩。
+
+
+最后留一个小清单,方便对号入座:
+
+
+- 想做内容上线门禁/品牌质检:Dingo 里开 ArtiMuse + 清晰度/尺寸/重复/相关性四件套,报表一页搞定;
+
+
+- 想做大批量选图:把阈值先设 6,Good 先发,Bad 留作人工复核或改图清单;
+
+
+- 想做创作提升/教学反馈:多看 ArtiMuse 的维度点评摘录,按“构图/光影/元素删减/叙事”四步复盘,进步很快。
+
+
+立即复现(开源仓库):Dingo(GitHub)https://github.com/MigoXLab/dingo | ArtiMuse(GitHub)https://github.com/thunderbolt215/ArtiMuse
+
+
+ 样图来源注明一下:上面的示例由 nano banana 生成/编辑,仅用于技术评测。想拿到我们这次的评测模板、规则配置和示例脚本,评论或私信「Dingo 评图」,我把可复现素材包发给你。我们也会持续更新更多风格的对比结果(比如“人物一致性”“多图融合”“产品演示”),把“好看”真正变成你团队的一条流水线。
diff --git a/docs/posts/reddit.md b/docs/posts/reddit.md
index 6a6a2998..71c7acac 100644
--- a/docs/posts/reddit.md
+++ b/docs/posts/reddit.md
@@ -187,3 +187,199 @@ Growing adoption across organizations focused on AI safety and reliability, with
**Resources**: https://github.com/MigoXLab/dingo
What approaches does your team use for AI quality assurance? How do you currently handle hallucination detection in production systems?
+
+---
+
+# 文案四 - Dingo × ArtiMuse Integration
+
+### For r/MachineLearning
+
+**Title**: [P] Automated aesthetic evaluation pipeline for AI-generated images using Dingo × ArtiMuse integration
+
+We built an automated pipeline to systematically evaluate AI-generated image quality beyond simple "does it work?" testing.
+
+### The Problem:
+Most AI image generation evaluation focuses on technical metrics (FID, CLIP scores) but lacks systematic aesthetic assessment that correlates with human perception. Teams often rely on manual review or basic quality gates, making it difficult to scale content production or maintain consistent aesthetic standards.
+
+### Our Approach:
+**Automated Aesthetic Pipeline:**
+- **nano-banana** generates diverse style images
+- **ArtiMuse** provides 8-dimensional aesthetic analysis
+- **Dingo** orchestrates the entire evaluation workflow with configurable thresholds
+
+**ArtiMuse's 8-Dimensional Framework:**
+1. **Composition**: Visual balance and arrangement
+2. **Visual Elements**: Color harmony, contrast, lighting
+3. **Technical Execution**: Sharpness, exposure, details
+4. **Originality**: Creative uniqueness and innovation
+5. **Theme Expression**: Narrative clarity and coherence
+6. **Emotional Response**: Viewer engagement and impact
+7. **Gestalt Completion**: Overall visual coherence
+8. **Comprehensive Assessment**: Holistic evaluation
+
+### Evaluation Results:
+**Test Dataset**: 20 diverse images from nano-banana
+**Performance**: 75% pass rate (threshold: 6.0/10)
+**Processing Speed**: 6.3 seconds/image average
+**Quality Distribution**:
+- High scores (7.0+): Clear composition, natural lighting, rich details
+- Low scores (<6.0): Over-stylization, poor visual hierarchy, excessive branding
+
+### Example Findings:
+🌃 **Night cityscape (7.73/10)**: Excellent layering, dynamic lighting, atmospheric details
+👴 **Craftsman portrait (7.42/10)**: Perfect focus, warm storytelling, technical precision
+🐻 **Cute sticker (4.82/10)**: Clean execution but lacks visual depth and narrative
+📊 **Logo design (5.68/10)**: Functional but limited artistic merit
+
+### Technical Implementation:
+- **ArtiMuse**: Trained on ArtiMuse-10K dataset (photography, painting, design, AIGC)
+- **Scoring Method**: Continuous value prediction (Token-as-Score approach)
+- **Integration**: RESTful API with polling-based task management
+- **Output**: Structured reports with actionable feedback
+
+### Applications:
+- **Content Production**: Automated quality gates for publishing pipelines
+- **Brand Guidelines**: Consistent aesthetic standards across teams
+- **Creative Iteration**: Detailed feedback for improvement cycles
+- **A/B Testing**: Systematic comparison of generation parameters
+
+**Code**: https://github.com/MigoXLab/dingo
+**ArtiMuse**: https://github.com/thunderbolt215/ArtiMuse
+
+How do you currently evaluate aesthetic quality in your AI-generated content? What metrics do you find most predictive of human preference?
+
+---
+
+### For r/artificial
+
+**Title**: Beyond technical metrics: Building systematic aesthetic evaluation for AI-generated images
+
+Sharing our experiment in automated aesthetic assessment that goes beyond traditional image quality metrics.
+
+### Background:
+While technical metrics like FID and CLIP scores are useful, they don't capture the aesthetic qualities that determine whether AI-generated images are actually usable for content production, marketing, or creative work.
+
+### The Challenge:
+Most teams evaluate AI-generated images through:
+- Manual review (subjective, doesn't scale)
+- Basic technical metrics (resolution, file size)
+- Simple pass/fail rules (faces detected, appropriate aspect ratio)
+
+None of these approaches capture the aesthetic nuances that make images compelling to human viewers.
+
+### Our Solution:
+We built an integrated pipeline combining **nano-banana** image generation, **ArtiMuse** aesthetic evaluation, and **Dingo** workflow orchestration.
+
+**Key Innovation - 8-Dimensional Aesthetic Framework:**
+Instead of a single quality score, ArtiMuse breaks down aesthetics into measurable components:
+- Composition and visual flow
+- Technical execution quality
+- Emotional impact and storytelling
+- Originality and creative merit
+
+**Training Approach:**
+- **Dataset**: ArtiMuse-10K with expert annotations across diverse content types
+- **Method**: Continuous scoring rather than categorical classification
+- **Validation**: High correlation with human aesthetic preferences
+
+### Real-World Results:
+**Pipeline Performance**:
+- 75% pass rate at 6.0/10 threshold
+- 6.3s average processing time per image
+- Detailed reasoning for each score dimension
+
+**Quality Insights**:
+- **High performers**: Clear subject matter, natural lighting, balanced composition
+- **Common failures**: Over-stylization, poor visual hierarchy, excessive text/branding
+- **Edge cases**: Artistic styles that challenge conventional aesthetic standards
+
+### Practical Applications:
+1. **Content Pipelines**: Automated screening before human review
+2. **Parameter Optimization**: Systematic evaluation of generation settings
+3. **Quality Assurance**: Consistent standards across different content creators
+4. **User Experience**: Better content recommendations based on aesthetic quality
+
+### Open Questions:
+- How do aesthetic preferences vary across cultural contexts?
+- Can we predict long-term aesthetic trends from current evaluation data?
+- What's the optimal balance between artistic innovation and broad appeal?
+
+This represents a step toward more human-aligned AI evaluation. Instead of optimizing purely for technical metrics, we can start optimizing for the qualities that actually matter to end users.
+
+**Resources**:
+- Pipeline code: https://github.com/MigoXLab/dingo
+- ArtiMuse framework: https://github.com/thunderbolt215/ArtiMuse
+
+What's your experience with aesthetic evaluation in AI systems? Do you think systematic aesthetic assessment could improve AI-generated content quality?
+
+---
+
+### For r/ComputerVision
+
+**Title**: [R] Multi-dimensional aesthetic evaluation for AI-generated images: ArtiMuse framework integration
+
+**Abstract**: We present a systematic approach to aesthetic evaluation of AI-generated images using an 8-dimensional framework integrated with automated workflow orchestration.
+
+### Motivation:
+Current image generation evaluation relies heavily on technical metrics (FID, IS, CLIP score) which, while useful for assessing technical quality, fail to capture aesthetic properties that correlate with human preferences and practical usability.
+
+### Methodology:
+
+**ArtiMuse Framework:**
+- **Training Data**: 10,000 annotated images across photography, digital art, design, and AI-generated content
+- **Architecture**: Multi-task learning with 8 specialized evaluation heads
+- **Scoring**: Continuous value prediction using token-as-score approach
+- **Evaluation Dimensions**: Composition, visual elements, technical execution, originality, theme expression, emotional response, gestalt completion, comprehensive assessment
+
+**Integration Pipeline:**
+- **Image Generation**: nano-banana with diverse prompt sets
+- **Evaluation**: RESTful API calls to ArtiMuse service
+- **Orchestration**: Dingo framework with configurable thresholds and batch processing
+- **Output**: Structured evaluation reports with dimension-specific feedback
+
+### Experimental Setup:
+- **Dataset**: 20 images across 4 style categories (photorealistic, artistic, graphic design, abstract)
+- **Evaluation Threshold**: 6.0/10 (adjustable based on use case)
+- **Metrics**: Pass rate, processing time, correlation with human evaluators
+
+### Results:
+- **Overall Performance**: 75% pass rate at 6.0 threshold
+- **Processing Speed**: 6.3 seconds/image (including network latency)
+- **Score Distribution**: Mean 6.2, std 1.4, range 4.8-7.7
+- **Human Correlation**: Strong agreement on high/low quality distinctions
+
+**Qualitative Analysis:**
+- **High-scoring images**: Demonstrate clear visual hierarchy, natural lighting, technical precision
+- **Low-scoring images**: Often suffer from over-stylization, poor composition, or excessive graphic elements
+- **Edge cases**: Abstract or experimental styles that challenge conventional aesthetic frameworks
+
+### Discussion:
+
+**Advantages over traditional metrics:**
+- Provides actionable feedback for image improvement
+- Captures aesthetic properties beyond technical quality
+- Scalable alternative to manual review processes
+- Consistent evaluation standards across different content types
+
+**Limitations:**
+- Cultural and subjective aesthetic preferences not fully captured
+- Performance on emerging artistic styles requires validation
+- Computational overhead compared to simple technical metrics
+
+### Applications:
+- **Content Production**: Automated quality gates in publishing workflows
+- **Model Development**: Aesthetic-aware loss functions for training
+- **User Experience**: Improved content recommendation and curation
+- **Research**: Systematic evaluation of aesthetic properties in generative models
+
+### Future Work:
+- Cross-cultural validation of aesthetic preferences
+- Real-time evaluation optimization
+- Integration with diffusion model training pipelines
+- Comparative analysis with other aesthetic evaluation frameworks
+
+**Code and Data**: Available under Apache 2.0 license
+- Framework: https://github.com/MigoXLab/dingo
+- ArtiMuse: https://github.com/thunderbolt215/ArtiMuse
+
+How do you currently approach aesthetic evaluation in your computer vision work? What metrics have you found most reliable for predicting human aesthetic preferences?
diff --git a/docs/posts/x.md b/docs/posts/x.md
index 14ba45ba..4adfdc45 100644
--- a/docs/posts/x.md
+++ b/docs/posts/x.md
@@ -57,3 +57,22 @@ Multi-language support + 1s response time
📖 Try: https://deepwiki.com/MigoXLab/dingo
⭐ GitHub: https://github.com/MigoXLab/dingo
#Documentation #AI
+
+---
+
+# 文案四 - Dingo × ArtiMuse Integration
+
+Ready to upgrade from "gut feeling" to "standardized selection"?
+
+🔗 Dingo: github.com/MigoXLab/dingo
+🔗 ArtiMuse: github.com/thunderbolt215/ArtiMuse
+
+Perfect for content QA, brand guidelines, or creative iteration!
+#AI #ImageGeneration #QualityAssurance
+
+## Standalone Tweet Option
+🚀 Built an automated image quality pipeline: nano banana generates → ArtiMuse evaluates (8 aesthetic dimensions) → Dingo orchestrates everything
+
+Result: 75% pass rate, detailed feedback on composition/lighting/originality
+
+Open source: github.com/MigoXLab/dingo
diff --git a/examples/3h/3h_eval.py b/examples/3h/3h_eval.py
new file mode 100644
index 00000000..2a50d6b3
--- /dev/null
+++ b/examples/3h/3h_eval.py
@@ -0,0 +1,43 @@
+import os
+from pathlib import Path
+
+from dingo.config import InputArgs
+from dingo.exec import Executor
+
+if __name__ == '__main__':
+ OPENAI_MODEL = 'deepseek-chat'
+ OPENAI_URL = 'https://api.deepseek.com/v1'
+ OPENAI_KEY = os.getenv("OPENAI_KEY")
+
+ input_data = {
+ "input_path": str(Path("test/data/test_3h_jsonl.jsonl")),
+ "dataset": {
+ "source": "local",
+ "format": "jsonl",
+ "field": {
+ "prompt": "input",
+ "content": "response",
+ "context": "response"
+ }
+ },
+ "executor": {
+ "prompt_list": ["PromptTextHarmless", "PromptTextHelpful", "PromptTextHonest"],
+ "result_save": {
+ "bad": True,
+ "good": True
+ }
+ },
+ "evaluator": {
+ "llm_config": {
+ "LLMText3HHarmless": {
+ "model": OPENAI_MODEL,
+ "key": OPENAI_KEY,
+ "api_url": OPENAI_URL,
+ }
+ }
+ }
+ }
+ input_args = InputArgs(**input_data)
+ executor = Executor.exec_map["local"](input_args)
+ result = executor.execute()
+ print(result)
diff --git a/examples/audio/audioSnr.py b/examples/audio/audioSnr.py
new file mode 100644
index 00000000..78e7ebe3
--- /dev/null
+++ b/examples/audio/audioSnr.py
@@ -0,0 +1,28 @@
+import os
+from pathlib import Path
+
+from dingo.config import InputArgs
+from dingo.exec import Executor
+
+if __name__ == '__main__':
+ input_data = {
+ "input_path": str(Path("test/data/test_audio_snr.jsonl")),
+ "dataset": {
+ "source": "local",
+ "format": "jsonl",
+ "field": {
+ "content": "content"
+ }
+ },
+ "executor": {
+ "rule_list": ["RuleAudioSnrQuality"],
+ "result_save": {
+ "bad": True,
+ "good": True
+ }
+ }
+ }
+ input_args = InputArgs(**input_data)
+ executor = Executor.exec_map["local"](input_args)
+ result = executor.execute()
+ print(result)
diff --git a/examples/compare/compare_content.py b/examples/compare/compare_content.py
index 2c25cc89..4e4930a7 100644
--- a/examples/compare/compare_content.py
+++ b/examples/compare/compare_content.py
@@ -13,7 +13,7 @@
}
},
"executor": {
- "prompt_list": ["PromptHtmlAbstract"],
+ "prompt_list": ["PromptHtmlExtractCompare"],
"batch_size": 10,
"max_workers": 10,
"result_save": {
@@ -24,7 +24,7 @@
},
"evaluator": {
"llm_config": {
- "LLMHtmlAbstract": {
+ "LLMHtmlExtractCompare": {
"key": "",
"api_url": ""
}
diff --git a/examples/document_parser/vlm_document_parser_quality.py b/examples/document_parser/vlm_document_parser_quality.py
new file mode 100644
index 00000000..5a08723c
--- /dev/null
+++ b/examples/document_parser/vlm_document_parser_quality.py
@@ -0,0 +1,35 @@
+from dingo.config import InputArgs
+from dingo.exec import Executor
+
+if __name__ == '__main__':
+ input_data = {
+ "input_path": "../../test/data/test_img_md.jsonl",
+ "dataset": {
+ "source": "local",
+ "format": "image",
+ "field": {
+ "id": "id",
+ "content": "content",
+ "image": "img"
+ }
+ },
+ "executor": {
+ "prompt_list": ["PromptDocumentParsingQuality"],
+ "result_save": {
+ "bad": True,
+ "good": True
+ }
+ },
+ "evaluator": {
+ "llm_config": {
+ "VLMDocumentParsingQuality": {
+ "key": "",
+ "api_url": "",
+ }
+ }
+ }
+ }
+ input_args = InputArgs(**input_data)
+ executor = Executor.exec_map["local"](input_args)
+ result = executor.execute()
+ print(result)
diff --git a/examples/factcheck/dataset_factcheck_evaluation.py b/examples/factcheck/dataset_factcheck_evaluation.py
new file mode 100644
index 00000000..76f71a5a
--- /dev/null
+++ b/examples/factcheck/dataset_factcheck_evaluation.py
@@ -0,0 +1,120 @@
+"""
+Dataset Factuality Evaluation Example
+
+This example demonstrates how to use Dingo's factuality evaluation capability
+for batch evaluation of datasets, particularly useful for:
+- LLM response validation
+- RAG system evaluation
+- SFT data quality assessment
+"""
+import os
+from pathlib import Path
+
+from dingo.config import InputArgs
+from dingo.exec import Executor
+from dingo.io import Data
+# Force import factuality evaluation modules
+from dingo.model.llm.llm_factcheck_public import LLMFactCheckPublic
+from dingo.model.prompt.prompt_factcheck import PromptFactCheck
+
+OPENAI_MODEL = 'deepseek-chat'
+OPENAI_URL = 'https://api.deepseek.com/v1'
+OPENAI_KEY = os.getenv("OPENAI_KEY")
+
+
+def evaluate_factuality_jsonl_dataset():
+ """
+ Example: Evaluate a JSONL dataset for factuality
+ Expected JSONL format:
+ {"data_id": "1", "prompt": "question", "content": "response"}
+ """
+ print("=== Dataset Factuality Evaluation ===")
+
+ input_data = {
+ "input_path": str(Path("test/data/factcheck_test.jsonl")), # Your JSONL file path
+ "output_path": "output/factcheck_evaluation/",
+ "dataset": {
+ "source": "local",
+ "format": "jsonl",
+ "field": {
+ "prompt": "question", # 注意这里使用 question 作为 prompt 字段
+ "content": "content"
+ }
+ },
+ "executor": {
+ "eval_group": "factuality", # 使用 factuality 评估组
+ "result_save": {
+ "bad": True, # 保存不实信息
+ "good": True # 保存真实信息
+ }
+ },
+ "evaluator": {
+ "llm_config": {
+ "LLMFactCheckPublic": {
+ "model": OPENAI_MODEL,
+ "key": OPENAI_KEY,
+ "api_url": OPENAI_URL,
+ }
+ }
+ }
+ }
+
+ input_args = InputArgs(**input_data)
+ executor = Executor.exec_map["local"](input_args)
+ result = executor.execute()
+
+ print("\n=== Evaluation Summary ===")
+ print(f"Total processed: {result.total}")
+ print(f"Factual responses: {result.num_good}")
+ print(f"Non-factual responses: {result.num_bad}")
+ print(f"Overall factuality score: {result.score:.2%}")
+ print(f"\nType distribution: {result.type_ratio}")
+ print(f"Name distribution: {result.name_ratio}")
+
+
+def evaluate_single_data_example():
+ """
+ Example: Evaluate a single piece of data for factuality
+ This is useful for testing or real-time evaluation
+ """
+ print("=== Single Data Factuality Evaluation ===")
+
+ # 配置评估器
+ evaluator = LLMFactCheckPublic()
+ evaluator.dynamic_config.model = OPENAI_MODEL
+ evaluator.dynamic_config.key = OPENAI_KEY
+ evaluator.dynamic_config.api_url = OPENAI_URL
+ evaluator.dynamic_config.parameters = {
+ "temperature": 0.1, # 降低随机性以提高一致性
+ "max_tokens": 2000
+ }
+
+ # 创建测试数据
+ test_data = Data(
+ data_id="test_1",
+ prompt="Tell me about Albert Einstein's Nobel Prize.",
+ content="Albert Einstein won the Nobel Prize in Physics in 1921 for his work on the photoelectric effect. However, many people mistakenly think he won it for his theory of relativity, which actually never received a Nobel Prize due to the controversial nature of relativity at the time."
+ )
+ # 执行评估
+ result = evaluator.eval(test_data)
+
+ print("\n=== Evaluation Result ===")
+ print(f"Error Status: {result.error_status}")
+ print(f"Type: {result.type}")
+ print(f"Name: {result.name}")
+ print(f"Reason: {result.reason}")
+
+
+if __name__ == "__main__":
+ print("📊 Dingo Factuality Evaluation Examples")
+ print("=" * 60)
+ print()
+
+ # Run examples
+ # print("1. Dataset Evaluation Example")
+ # print("-" * 30)
+ # evaluate_factuality_jsonl_dataset()
+
+ print("2. Single Data Evaluation Example")
+ print("-" * 30)
+ evaluate_single_data_example()
diff --git a/examples/hallucination/dataset_hallucination_evaluation.py b/examples/hallucination/dataset_hallucination_evaluation.py
index a53388a3..43024d78 100644
--- a/examples/hallucination/dataset_hallucination_evaluation.py
+++ b/examples/hallucination/dataset_hallucination_evaluation.py
@@ -7,6 +7,7 @@
- LLM response validation
- SFT data quality assessment
"""
+from pathlib import Path
from dingo.config import InputArgs
from dingo.exec import Executor
@@ -25,7 +26,7 @@ def evaluate_hallucination_jsonl_dataset():
print("=== Example 1: JSONL Dataset Evaluation ===")
input_data = {
- "input_path": "test/data/hallucination_test.jsonl", # Your JSONL file path
+ "input_path": str(Path("test/data/hallucination_test.jsonl")), # Your JSONL file path
"output_path": "output/hallucination_evaluation/",
"dataset": {
"source": "local",
@@ -46,8 +47,8 @@ def evaluate_hallucination_jsonl_dataset():
"llm_config": {
"LLMHallucination": {
"model": "deepseek-chat",
- "key": "YOUR_API_KEY",
- "api_url": "https://api.deepseek.com"
+ "key": "Your API Key",
+ "api_url": "https://api.deepseek.com/v1"
}
}
}
@@ -58,101 +59,102 @@ def evaluate_hallucination_jsonl_dataset():
result = executor.execute()
print(result)
- print(f"Evaluation completed successfully!")
- print(f"Total processed: {result.total}")
- print(f"Hallucinations detected: {result.num_bad}")
- print(f"Clean responses: {result.num_good}")
- print(f"Overall score: {result.score}%")
- print(f"Type distribution: {result.type_ratio}")
- print(f"Name distribution: {result.name_ratio}")
- print()
-# def evaluate_rag_responses():
-# """
-# Example 2: Evaluate RAG system responses
-# """
-# print("=== Example 2: RAG System Evaluation ===")
-
-# input_data = {
-# "input_path": "test_data/rag_responses.jsonl",
-# "data_format": "jsonl",
-# "dataset": "local",
-# "column_content": "generated_response", # The LLM generated response
-# "column_prompt": "user_question", # The user's question
-# "column_context": "retrieved_contexts", # The retrieved contexts
-# "custom_config": {
-# "prompt_list": ["PromptHallucination"], # Use hallucination detection prompt
-# "llm_config": {
-# "LLMHallucination": {
-# "model": "gpt-4o-mini", # Use cheaper model for batch processing
-# "key": "YOUR_API_KEY",
-# "api_url": "https://api.openai.com/v1/chat/completions",
-# "threshold": 0.3 # Lower threshold for more sensitive detection
-# }
-# }
-# },
-# "max_workers": 5, # Process 5 items in parallel
-# "batch_size": 50,
-# "save_data": True,
-# "output_path": "output/rag_hallucination_check/"
-# }
-
-# input_args = InputArgs(**input_data)
-# executor = Executor.exec_map["local"](input_args)
-# result = executor.execute()
-
-# print(f"RAG evaluation completed!")
-# print(f"Hallucination rate: {result.bad_count / result.total_count:.2%}")
-# print()
-
-
-# def evaluate_sft_dataset_with_references():
-# """
-# Example 3: Evaluate SFT dataset with reference contexts
-# """
-# print("=== Example 3: SFT Dataset with References ===")
-
-# input_data = {
-# "input_path": "your_sft_dataset.jsonl",
-# "data_format": "jsonl",
-# "dataset": "local",
-# "column_content": "response",
-# "column_prompt": "instruction",
-# "column_context": "reference_docs", # Reference documents for fact-checking
-# "eval_group": "sft", # Use comprehensive SFT evaluation group
-# "custom_config": {
-# # Include multiple evaluations
-# "prompt_list": [
-# "QUALITY_BAD_HALLUCINATION",
-# "QUALITY_HELPFUL",
-# "QUALITY_HARMLESS"
-# ],
-# "llm_config": {
-# "LLMHallucination": {
-# "model": "gpt-4o",
-# "key": "YOUR_API_KEY",
-# "api_url": "https://api.openai.com/v1/chat/completions"
-# },
-# "LLMText3HHelpful": {
-# "model": "gpt-4o",
-# "key": "YOUR_API_KEY",
-# "api_url": "https://api.openai.com/v1/chat/completions"
-# }
-# }
-# },
-# "save_data": True,
-# "save_correct": True, # Also save data that passes all checks
-# "output_path": "output/sft_comprehensive_evaluation/"
-# }
-
-# input_args = InputArgs(**input_data)
-# executor = Executor.exec_map["local"](input_args)
-# result = executor.execute()
-
-# print(f"SFT dataset evaluation completed!")
-# print(f"Quality metrics summary: {result.summary}")
-# print()
+def evaluate_hallucination_with_hhem_rule():
+ """
+ Example 2: Evaluate hallucinations using RuleHallucinationHHEM (Local HHEM model)
+
+ RuleHallucinationHHEM uses Vectara's HHEM-2.1-Open model for local inference:
+ - Superior performance compared to GPT-3.5/GPT-4 on benchmarks
+ - Local inference with <600MB RAM usage
+ - Fast processing (~1.5s for 2k tokens on modern CPU)
+ - No API costs or rate limits
+ """
+ print("=== Example 2: HHEM Rule-Based Evaluation ===")
+
+ input_data = {
+ "input_path": str(Path("test/data/hallucination_test.jsonl")),
+ "output_path": "output/hhem_evaluation/",
+ "dataset": {
+ "source": "local",
+ "format": "jsonl",
+ "field": {
+ "prompt": "prompt",
+ "content": "content",
+ "context": "context",
+ }
+ },
+ "executor": {
+ "rule_list": ["RuleHallucinationHHEM"], # Use HHEM rule instead of LLM
+ "result_save": {
+ "bad": True,
+ "good": True # Also save good examples for comparison
+ }
+ },
+ "evaluator": {
+ "rule_config": {
+ "RuleHallucinationHHEM": {
+ "threshold": 0.8 # Default threshold (0.0-1.0, higher = more strict)
+ }
+ }
+ }
+ }
+
+ input_args = InputArgs(**input_data)
+ executor = Executor.exec_map["local"](input_args)
+ result = executor.execute()
+
+ print(result)
+
+
+def evaluate_combined_llm_and_hhem():
+ """
+ Example 3: Combined evaluation using both LLM and HHEM for comprehensive analysis
+ """
+ print("=== Example 3: Combined LLM + HHEM Evaluation ===")
+
+ input_data = {
+ "input_path": str(Path("test/data/hallucination_test.jsonl")),
+ "output_path": "output/combined_evaluation/",
+ "dataset": {
+ "source": "local",
+ "format": "jsonl",
+ "field": {
+ "prompt": "prompt",
+ "content": "content",
+ "context": "context",
+ }
+ },
+ "executor": {
+ "rule_list": ["RuleHallucinationHHEM"], # Local HHEM rule
+ "prompt_list": ["PromptHallucination"], # LLM-based evaluation
+ "result_save": {
+ "bad": True,
+ "good": True
+ }
+ },
+ "evaluator": {
+ "rule_config": {
+ "RuleHallucinationHHEM": {
+ "threshold": 0.5 # HHEM threshold
+ }
+ },
+ "llm_config": {
+ "LLMHallucination": {
+ "model": "deepseek-chat",
+ "key": "Your API Key",
+ "api_url": "https://api.deepseek.com/v1"
+ }
+ }
+ }
+ }
+
+ input_args = InputArgs(**input_data)
+ executor = Executor.exec_map["local"](input_args)
+ result = executor.execute()
+
+ print(result)
def create_sample_test_data():
@@ -196,25 +198,14 @@ def create_sample_test_data():
if __name__ == "__main__":
- print("📊 Dingo Dataset Hallucination Evaluation Examples")
- print("=" * 60)
- print()
-
- # Create sample data first
+ # Create sample data first (if needed)
# create_sample_test_data() # Commented out - using pre-built test data
print()
- print("⚠️ Configuration Notes:")
- print("1. Set your OpenAI API key in the custom_config")
- print("2. Adjust file paths to your actual data")
- print("3. Modify column names to match your data format")
- print("4. Tune threshold values based on your requirements")
- print()
-
# Run examples (comment out if you don't have actual data)
- evaluate_hallucination_jsonl_dataset()
- # evaluate_rag_responses()
- # evaluate_sft_dataset_with_references()
+ # evaluate_hallucination_jsonl_dataset()
+ evaluate_hallucination_with_hhem_rule()
+ # evaluate_combined_llm_and_hhem() # Uncomment to test combined approach
print("💡 Usage Tips:")
print("- Use lower thresholds (0.2-0.3) for sensitive hallucination detection")
@@ -222,3 +213,4 @@ def create_sample_test_data():
print("- Combine with other quality metrics for comprehensive assessment")
print("- Use parallel processing (max_workers) for large datasets")
print("- Check output files for detailed per-item analysis")
+ print()
diff --git a/examples/image/sdk_image_label_overlap.py b/examples/image/sdk_image_label_overlap.py
new file mode 100644
index 00000000..4922df01
--- /dev/null
+++ b/examples/image/sdk_image_label_overlap.py
@@ -0,0 +1,32 @@
+from dingo.config import InputArgs
+from dingo.exec import Executor
+
+
+def image_label_overlap():
+ input_data = {
+ "input_path": "../../test/data/img_label/test_img_label_overlap.jsonl",
+ "dataset": {
+ "source": "local",
+ "format": "image",
+ "field": {
+ "id": "id",
+ "content": "content",
+ "image": "img"
+ }
+ },
+ "executor": {
+ "rule_list": ["RuleImageLabelOverlap"],
+ "result_save": {
+ "bad": True,
+ "good": True
+ }
+ }
+ }
+ input_args = InputArgs(**input_data)
+ executor = Executor.exec_map["local"](input_args)
+ result = executor.execute()
+ print(result)
+
+
+if __name__ == '__main__':
+ image_label_overlap()
diff --git a/test/data/audio/test.wav b/test/data/audio/test.wav
new file mode 100644
index 00000000..017ae254
Binary files /dev/null and b/test/data/audio/test.wav differ
diff --git a/test/data/c6be64e4-1dd4-4bd4-b923-55a63a6de397_page_1.jpg b/test/data/c6be64e4-1dd4-4bd4-b923-55a63a6de397_page_1.jpg
new file mode 100644
index 00000000..f378446e
Binary files /dev/null and b/test/data/c6be64e4-1dd4-4bd4-b923-55a63a6de397_page_1.jpg differ
diff --git a/test/data/img_label/overlap_0.jpg b/test/data/img_label/overlap_0.jpg
new file mode 100644
index 00000000..1fd6986a
Binary files /dev/null and b/test/data/img_label/overlap_0.jpg differ
diff --git a/test/data/img_label/overlap_1.jpg b/test/data/img_label/overlap_1.jpg
new file mode 100644
index 00000000..2195172c
Binary files /dev/null and b/test/data/img_label/overlap_1.jpg differ
diff --git a/test/data/img_label/test_img_label_overlap.jsonl b/test/data/img_label/test_img_label_overlap.jsonl
new file mode 100644
index 00000000..36a21bc6
--- /dev/null
+++ b/test/data/img_label/test_img_label_overlap.jsonl
@@ -0,0 +1,2 @@
+{"id": "0", "content": {"width": 1958, "height": 2890, "valid": true, "rotate": 0, "step_1": {"toolName": "rectTool", "dataSourceStep": 0, "result": [{"x": 4.981718543237025, "y": 77.19413876889965, "width": 145.52294067118865, "height": 35.95272651876426, "attribute": "abandon", "valid": true, "id": "nMlHKIW8", "sourceID": "", "textAttribute": "", "order": 1}, {"x": 582.0452071564865, "y": 44.27276441450883, "width": 552.1299835355262, "height": 83.36740372434366, "attribute": "abandon", "valid": true, "id": "pVn6KGgl", "sourceID": "", "textAttribute": "", "order": 2}, {"x": 1632.38985435972, "y": 55.44894947561682, "width": 310.49816920408557, "height": 52.910001927153594, "attribute": "abandon", "valid": true, "id": "VqrTaqhs", "sourceID": "", "textAttribute": "", "order": 3}, {"x": 139.53888599343514, "y": 172.3997511840118, "width": 1677.274743571207, "height": 83.39320117209512, "attribute": "title", "valid": true, "id": "KMvfboO6", "sourceID": "", "textAttribute": "", "order": 4}, {"x": 205.64259735236476, "y": 744.5851602453567, "width": 87.0314424261084, "height": 11.678340517241377, "attribute": "title", "valid": true, "id": "6lN4JART", "sourceID": "", "textAttribute": "", "order": 6}, {"x": 205.45585957850435, "y": 991.7017398064909, "width": 86.98216508479851, "height": 11.382157305119028, "attribute": "title", "valid": true, "id": "MAigse95", "sourceID": "", "textAttribute": "", "order": 7}, {"x": 256.0206102179214, "y": 1943.3993600300807, "width": 1449.632522812688, "height": 62.993979454283625, "attribute": "title", "valid": true, "id": "uTyerCev", "sourceID": "", "textAttribute": "", "order": 9}, {"x": 1644.5739071051896, "y": 1735.7914828700239, "width": 124.53228873367473, "height": 13.305955370696934, "attribute": "title", "valid": true, "id": "iqxhFdcd", "sourceID": "", "textAttribute": "", "order": 10}, {"x": 671.5972636962092, "y": 570.8672818702771, "width": 124.65858837376132, "height": 11.93911467002209, "attribute": "title", "valid": true, "id": "EEjj6Qt0", "sourceID": "", "textAttribute": "", "order": 11}, {"x": 15.746252109686681, "y": 310.4683917981371, "width": 466.91871193103003, "height": 36.59838640716662, "attribute": "plain text", "valid": true, "id": "wcSBNn2o", "sourceID": "", "textAttribute": "", "order": 12}, {"x": 15.619888272884813, "y": 347.7095968016391, "width": 467.6206219948781, "height": 36.64254800389445, "attribute": "plain text", "valid": true, "id": "c8W1Z7SS", "sourceID": "", "textAttribute": "", "order": 13}, {"x": 15.83786154751417, "y": 384.9278373521961, "width": 467.03372247197404, "height": 61.57463500116792, "attribute": "plain text", "valid": true, "id": "pitldKnD", "sourceID": "", "textAttribute": "", "order": 14}, {"x": 14.086504887016458, "y": 446.96680310015773, "width": 469.1235500937491, "height": 61.56582470104527, "attribute": "plain text", "valid": true, "id": "uEEg5NZg", "sourceID": "", "textAttribute": "", "order": 15}, {"x": 14.365886168387124, "y": 508.5287972379124, "width": 468.53409280953747, "height": 24.566000703632017, "attribute": "plain text", "valid": true, "id": "MafkohSr", "sourceID": "", "textAttribute": "", "order": 16}, {"x": 15.338248042825924, "y": 533.6156695531238, "width": 467.93204505351594, "height": 48.429870171120335, "attribute": "plain text", "valid": true, "id": "MMYQRCDX", "sourceID": "", "textAttribute": "", "order": 17}, {"x": 15.518531167101145, "y": 583.3275292552329, "width": 468.204088868588, "height": 23.948967369437668, "attribute": "plain text", "valid": true, "id": "fppO9l7V", "sourceID": "", "textAttribute": "", "order": 18}, {"x": 15.287605463046104, "y": 607.6189565058453, "width": 468.1426878881982, "height": 24.641536789685823, "attribute": "plain text", "valid": true, "id": "Str7T65q", "sourceID": "", "textAttribute": "", "order": 19}, {"x": 15.869332789917562, "y": 632.6888395035152, "width": 467.72735125273834, "height": 36.48143035928218, "attribute": "plain text", "valid": true, "id": "R904muqE", "sourceID": "", "textAttribute": "", "order": 20}, {"x": 14.8360474164979, "y": 669.3696468020496, "width": 468.48178603936043, "height": 25.099102528194756, "attribute": "plain text", "valid": true, "id": "17TmWbBS", "sourceID": "", "textAttribute": "", "order": 21}, {"x": 15.337173842509106, "y": 694.6427604482847, "width": 467.95409211585513, "height": 24.50662301020077, "attribute": "plain text", "valid": true, "id": "OeksYb6Y", "sourceID": "", "textAttribute": "", "order": 22}, {"x": 15.70058990727278, "y": 719.4829259989883, "width": 467.4388605541304, "height": 23.85218376111469, "attribute": "plain text", "valid": true, "id": "R1qagPmK", "sourceID": "", "textAttribute": "", "order": 23}, {"x": 15.270232885997435, "y": 757.1575385083266, "width": 468.3688140141414, "height": 73.16239442593806, "attribute": "plain text", "valid": true, "id": "2qwhVlhv", "sourceID": "", "textAttribute": "", "order": 24}, {"x": 15.626079508486315, "y": 830.5428209825427, "width": 467.62163934170496, "height": 36.67428489164761, "attribute": "plain text", "valid": true, "id": "fpyXTSip", "sourceID": "", "textAttribute": "", "order": 25}, {"x": 15.743426483639533, "y": 868.1012842637912, "width": 467.4556428347637, "height": 23.99985465924803, "attribute": "plain text", "valid": true, "id": "2zO5cn2D", "sourceID": "", "textAttribute": "", "order": 26}, {"x": 15.248062720672339, "y": 892.5573770750549, "width": 467.982800244572, "height": 36.59432928985854, "attribute": "plain text", "valid": true, "id": "HI8gH884", "sourceID": "", "textAttribute": "", "order": 27}, {"x": 15.479063220161901, "y": 930.8886828313259, "width": 468.2038881316026, "height": 60.36751657398068, "attribute": "plain text", "valid": true, "id": "xZq5STnF", "sourceID": "", "textAttribute": "", "order": 28}, {"x": 39.62475613447447, "y": 1005.2156658866876, "width": 340.3316085170776, "height": 11.000579778624589, "attribute": "plain text", "valid": true, "id": "zeRcHIOq", "sourceID": "", "textAttribute": "", "order": 29}, {"x": 39.83386101547554, "y": 1016.918459822259, "width": 292.8691290838014, "height": 11.745923885012742, "attribute": "plain text", "valid": true, "id": "A6hOcNZQ", "sourceID": "", "textAttribute": "", "order": 30}, {"x": 38.67953045890996, "y": 1030.049161407529, "width": 217.95074875821697, "height": 11.164518632388017, "attribute": "plain text", "valid": true, "id": "n59mwhUy", "sourceID": "", "textAttribute": "", "order": 31}, {"x": 38.974301080812864, "y": 1042.4811159570368, "width": 217.85531356985393, "height": 10.911990302344023, "attribute": "plain text", "valid": true, "id": "hYrOhASS", "sourceID": "", "textAttribute": "", "order": 32}, {"x": 15.50440480639204, "y": 1053.6925732557604, "width": 467.4490635837318, "height": 24.473522312061228, "attribute": "plain text", "valid": true, "id": "XoAWO7ix", "sourceID": "", "textAttribute": "", "order": 33}, {"x": 15.530316963854643, "y": 1079.068270077152, "width": 468.1063581926377, "height": 24.617160174976366, "attribute": "plain text", "valid": true, "id": "1H31CSql", "sourceID": "", "textAttribute": "", "order": 34}, {"x": 15.157655199595284, "y": 1103.8044154483412, "width": 467.6201321176066, "height": 23.305502557487124, "attribute": "plain text", "valid": true, "id": "raOUMtUD", "sourceID": "", "textAttribute": "", "order": 35}, {"x": 38.76092545031223, "y": 1129.0685860084711, "width": 435.96348966010476, "height": 11.365864165891022, "attribute": "plain text", "valid": true, "id": "5SegKHd2", "sourceID": "", "textAttribute": "", "order": 36}, {"x": 15.27918611326452, "y": 1140.733870176101, "width": 467.5618015168595, "height": 24.63721699571989, "attribute": "plain text", "valid": true, "id": "KnJSUKZn", "sourceID": "", "textAttribute": "", "order": 37}, {"x": 15.076107233282688, "y": 1165.6251163941663, "width": 467.995702760958, "height": 60.62124294710763, "attribute": "plain text", "valid": true, "id": "plKH9wFg", "sourceID": "", "textAttribute": "", "order": 38}, {"x": 15.357961896496326, "y": 1226.861736004452, "width": 467.4745216840877, "height": 25.011628303217567, "attribute": "plain text", "valid": true, "id": "MhcYHb1c", "sourceID": "", "textAttribute": "", "order": 39}, {"x": 15.09148320770222, "y": 1252.6056866125302, "width": 468.09259342204865, "height": 23.92635036038601, "attribute": "plain text", "valid": true, "id": "jmVrFB1i", "sourceID": "", "textAttribute": "", "order": 40}, {"x": 15.782218911883549, "y": 1276.6318529790074, "width": 467.5619052030203, "height": 25.142194084388176, "attribute": "plain text", "valid": true, "id": "Eb0Ywxrk", "sourceID": "", "textAttribute": "", "order": 41}, {"x": 39.8432437955782, "y": 1301.9717408773995, "width": 236.4692828637261, "height": 11.18710579031734, "attribute": "plain text", "valid": true, "id": "X5PkCaVi", "sourceID": "", "textAttribute": "", "order": 42}, {"x": 39.82334330380332, "y": 1314.823481088728, "width": 403.4655077339215, "height": 11.642450716565191, "attribute": "plain text", "valid": true, "id": "Nha4ZBc3", "sourceID": "", "textAttribute": "", "order": 43}, {"x": 15.311295396956307, "y": 1326.775354642143, "width": 467.7268491816638, "height": 23.495460114194653, "attribute": "plain text", "valid": true, "id": "Irgkcjtk", "sourceID": "", "textAttribute": "", "order": 44}, {"x": 40.06358522740696, "y": 1351.7366329085387, "width": 397.45033864101566, "height": 11.291788406372826, "attribute": "plain text", "valid": true, "id": "feyDlFJE", "sourceID": "", "textAttribute": "", "order": 45}, {"x": 15.418670479878054, "y": 1364.4079369725791, "width": 467.99338562022473, "height": 23.77868724182099, "attribute": "plain text", "valid": true, "id": "KzPKBr3l", "sourceID": "", "textAttribute": "", "order": 46}, {"x": 15.355091706058497, "y": 1388.704097093973, "width": 468.0550897762319, "height": 23.541347768124897, "attribute": "plain text", "valid": true, "id": "jyMVD8Qz", "sourceID": "", "textAttribute": "", "order": 47}, {"x": 16.181099518705157, "y": 1413.1976771502761, "width": 466.7434808176912, "height": 24.191332229811167, "attribute": "plain text", "valid": true, "id": "TFiEWo9r", "sourceID": "", "textAttribute": "", "order": 48}, {"x": 39.247785968293606, "y": 1437.9752428332129, "width": 411.9148589260537, "height": 10.735412889363506, "attribute": "plain text", "valid": true, "id": "8XNLkb6B", "sourceID": "", "textAttribute": "", "order": 49}, {"x": 15.232676744744742, "y": 1450.6059993430797, "width": 467.9661230554579, "height": 23.802982765492786, "attribute": "plain text", "valid": true, "id": "bRbyX2g6", "sourceID": "", "textAttribute": "", "order": 50}, {"x": 39.23996350311171, "y": 1475.77974162974, "width": 199.3183797448062, "height": 11.448629249194074, "attribute": "plain text", "valid": true, "id": "9adzXz5r", "sourceID": "", "textAttribute": "", "order": 51}, {"x": 39.64044227869491, "y": 1488.6352921087262, "width": 211.5759336718879, "height": 10.505397753341542, "attribute": "plain text", "valid": true, "id": "g9BmnXft", "sourceID": "", "textAttribute": "", "order": 52}, {"x": 14.600145682692002, "y": 1500.2742834514045, "width": 468.66872300222593, "height": 24.250791755743393, "attribute": "plain text", "valid": true, "id": "rOGCZ9jM", "sourceID": "", "textAttribute": "", "order": 53}, {"x": 14.950917658205817, "y": 1524.7880468504377, "width": 468.1932271199987, "height": 36.33971095616959, "attribute": "plain text", "valid": true, "id": "LRKR5JjB", "sourceID": "", "textAttribute": "", "order": 54}, {"x": 14.91940594341408, "y": 1561.727347505905, "width": 468.47860972116916, "height": 24.62816256888721, "attribute": "plain text", "valid": true, "id": "Zv1zQghr", "sourceID": "", "textAttribute": "", "order": 55}, {"x": 15.68470835916696, "y": 1586.867271717365, "width": 467.93055369825584, "height": 24.393090359867664, "attribute": "plain text", "valid": true, "id": "bPwzjxkW", "sourceID": "", "textAttribute": "", "order": 56}, {"x": 15.106857513541827, "y": 1611.7773461974043, "width": 468.19098148621237, "height": 36.31925800499595, "attribute": "plain text", "valid": true, "id": "mkSir2uu", "sourceID": "", "textAttribute": "", "order": 57}, {"x": 15.653787314063788, "y": 1648.315375192906, "width": 468.0224492342725, "height": 23.83899472465614, "attribute": "plain text", "valid": true, "id": "c9fREcw6", "sourceID": "", "textAttribute": "", "order": 58}, {"x": 15.685892881425113, "y": 1673.4149872649461, "width": 467.60137303238724, "height": 23.413522984883365, "attribute": "plain text", "valid": true, "id": "rZ9JuZGu", "sourceID": "", "textAttribute": "", "order": 59}, {"x": 15.070501110063557, "y": 1698.348579823798, "width": 468.68532369118896, "height": 23.643199628825418, "attribute": "plain text", "valid": true, "id": "7UZDWRBL", "sourceID": "", "textAttribute": "", "order": 60}, {"x": 39.29635407426594, "y": 1723.7172035851593, "width": 286.8457776779297, "height": 11.036174775409073, "attribute": "plain text", "valid": true, "id": "Oyn7wkFV", "sourceID": "", "textAttribute": "", "order": 61}, {"x": 39.228213990343114, "y": 1735.45684800845, "width": 429.4167993939479, "height": 11.628313946033181, "attribute": "plain text", "valid": true, "id": "o8sEprQG", "sourceID": "", "textAttribute": "", "order": 62}, {"x": 39.43234150098365, "y": 1747.8125801927024, "width": 424.6477543914014, "height": 11.569462992753982, "attribute": "plain text", "valid": true, "id": "q9DVlMfI", "sourceID": "", "textAttribute": "", "order": 63}, {"x": 39.16556439686604, "y": 1761.3446312153694, "width": 254.82704348389552, "height": 10.636921541464798, "attribute": "plain text", "valid": true, "id": "jYgq1vs5", "sourceID": "", "textAttribute": "", "order": 64}, {"x": 39.39507221310024, "y": 1772.969136675837, "width": 366.18554897513786, "height": 11.339973990110781, "attribute": "plain text", "valid": true, "id": "unsHlejX", "sourceID": "", "textAttribute": "", "order": 65}, {"x": 38.959150299745204, "y": 1785.1139298700305, "width": 344.68383732908995, "height": 10.960170508675922, "attribute": "plain text", "valid": true, "id": "6txh2tRN", "sourceID": "", "textAttribute": "", "order": 66}, {"x": 15.598464886673048, "y": 1797.7559049531626, "width": 467.61167342064095, "height": 35.84665437728337, "attribute": "plain text", "valid": true, "id": "PRp5y2Wn", "sourceID": "", "textAttribute": "", "order": 67}, {"x": 14.847638443225259, "y": 1834.0327427424154, "width": 468.1520751535374, "height": 24.48517012838935, "attribute": "plain text", "valid": true, "id": "BS5ugBoC", "sourceID": "", "textAttribute": "", "order": 68}, {"x": 15.805036231223687, "y": 1859.50662213577, "width": 467.37769282602363, "height": 24.260673974445524, "attribute": "plain text", "valid": true, "id": "ZfBYaYvG", "sourceID": "", "textAttribute": "", "order": 69}, {"x": 38.15186536510323, "y": 1884.6688119406235, "width": 445.21604666517777, "height": 11.314048311836897, "attribute": "plain text", "valid": true, "id": "gFtvy2Fu", "sourceID": "", "textAttribute": "", "order": 70}, {"x": 15.022579685684898, "y": 2050.3362595128324, "width": 467.46363146223524, "height": 37.2806244206863, "attribute": "plain text", "valid": true, "id": "R8ZVG4Xf", "sourceID": "", "textAttribute": "", "order": 71}, {"x": 39.045754353382755, "y": 2087.850879313515, "width": 246.19054881369829, "height": 11.333580252293016, "attribute": "plain text", "valid": true, "id": "8sb13uQb", "sourceID": "", "textAttribute": "", "order": 72}, {"x": 15.119307154097504, "y": 2101.4300856109694, "width": 465.9155556758467, "height": 22.94010784882353, "attribute": "plain text", "valid": true, "id": "cWQXVuQR", "sourceID": "", "textAttribute": "", "order": 73}, {"x": 15.151985618033681, "y": 2124.875046201517, "width": 468.1116202064144, "height": 36.37997641147571, "attribute": "plain text", "valid": true, "id": "yLCWWLO3", "sourceID": "", "textAttribute": "", "order": 74}, {"x": 15.293633093598116, "y": 2162.2461945165733, "width": 467.8028210755052, "height": 24.29049774554032, "attribute": "plain text", "valid": true, "id": "1Dgw46Sy", "sourceID": "", "textAttribute": "", "order": 75}, {"x": 15.044160471272631, "y": 2186.6601716717164, "width": 467.7500757922474, "height": 24.817553301377497, "attribute": "plain text", "valid": true, "id": "diWeENuz", "sourceID": "", "textAttribute": "", "order": 76}, {"x": 15.939569606690736, "y": 2211.7444709686915, "width": 466.62853466465276, "height": 24.562314186755803, "attribute": "plain text", "valid": true, "id": "zfR7eJjC", "sourceID": "", "textAttribute": "", "order": 77}, {"x": 14.873337986097939, "y": 2236.7165237190675, "width": 468.1833897250743, "height": 85.64922443938964, "attribute": "plain text", "valid": true, "id": "kfwA4AwK", "sourceID": "", "textAttribute": "", "order": 78}, {"x": 38.91324110602444, "y": 2324.2878845360324, "width": 354.9787015575316, "height": 11.38862155947379, "attribute": "plain text", "valid": true, "id": "OVVbudoH", "sourceID": "", "textAttribute": "", "order": 79}, {"x": 16.036882095802714, "y": 2336.019112356824, "width": 467.3350139893489, "height": 61.193629692042286, "attribute": "plain text", "valid": true, "id": "Z2fFojpg", "sourceID": "", "textAttribute": "", "order": 80}, {"x": 16.104933852009577, "y": 2397.4952046301214, "width": 466.7702210076511, "height": 49.101010858388705, "attribute": "plain text", "valid": true, "id": "tMiDd4ie", "sourceID": "", "textAttribute": "", "order": 81}, {"x": 15.49905236814865, "y": 2447.591818919091, "width": 467.2232555442725, "height": 36.18377374883699, "attribute": "plain text", "valid": true, "id": "oVQi7keg", "sourceID": "", "textAttribute": "", "order": 82}, {"x": 15.694996609737382, "y": 2484.2615424999144, "width": 467.6282857028166, "height": 37.078528493685795, "attribute": "plain text", "valid": true, "id": "ZBVLaERm", "sourceID": "", "textAttribute": "", "order": 83}, {"x": 15.586108732437141, "y": 2521.8788438930737, "width": 467.63800401488425, "height": 37.03252771231715, "attribute": "plain text", "valid": true, "id": "PmcOfW9K", "sourceID": "", "textAttribute": "", "order": 84}, {"x": 15.530442506091726, "y": 2559.1795735224123, "width": 467.7534117132067, "height": 23.015658016334285, "attribute": "plain text", "valid": true, "id": "YsEdFYRs", "sourceID": "", "textAttribute": "", "order": 85}, {"x": 17.154512533629497, "y": 2582.8486365499584, "width": 466.1721838104888, "height": 24.59251938528367, "attribute": "plain text", "valid": true, "id": "bB43m45V", "sourceID": "", "textAttribute": "", "order": 86}, {"x": 15.402767277431217, "y": 2608.276832859742, "width": 468.12766960948045, "height": 36.174257090369856, "attribute": "plain text", "valid": true, "id": "3wIru2m7", "sourceID": "", "textAttribute": "", "order": 87}, {"x": 15.32900030644073, "y": 2645.627273652108, "width": 467.83520248550946, "height": 23.875459160676513, "attribute": "plain text", "valid": true, "id": "g1FWnTlp", "sourceID": "", "textAttribute": "", "order": 88}, {"x": 40.71290738869558, "y": 2671.4160062918045, "width": 65.72492136407841, "height": 10.463669072888106, "attribute": "plain text", "valid": true, "id": "MfEUtZvB", "sourceID": "", "textAttribute": "", "order": 89}, {"x": 15.729109602998381, "y": 2682.9054213424865, "width": 467.00683741287656, "height": 73.2769505038997, "attribute": "plain text", "valid": true, "id": "kzU7Yehd", "sourceID": "", "textAttribute": "", "order": 90}, {"x": 15.818258571627661, "y": 2756.69598290228, "width": 467.337451422308, "height": 24.749395393179928, "attribute": "plain text", "valid": true, "id": "YOyiqO2C", "sourceID": "", "textAttribute": "", "order": 91}, {"x": 16.00477572577362, "y": 2781.6993087619917, "width": 466.8922021992866, "height": 36.76985484632805, "attribute": "plain text", "valid": true, "id": "UhVrfQJ0", "sourceID": "", "textAttribute": "", "order": 92}, {"x": 38.936203294113874, "y": 2819.110513507751, "width": 198.70050587118388, "height": 11.326327398212285, "attribute": "plain text", "valid": true, "id": "JsyKlzMN", "sourceID": "", "textAttribute": "", "order": 93}, {"x": 15.14073361420298, "y": 2832.1397557925347, "width": 467.52070355597175, "height": 23.04671383897966, "attribute": "plain text", "valid": true, "id": "iTJGUX0H", "sourceID": "", "textAttribute": "", "order": 94}, {"x": 39.13148307432708, "y": 2855.5624035859328, "width": 444.4133964904489, "height": 11.642020347739843, "attribute": "plain text", "valid": true, "id": "zxQrB9TD", "sourceID": "", "textAttribute": "", "order": 95}, {"x": 500.7394352783525, "y": 273.93656509145995, "width": 186.31087903385296, "height": 11.44327855870114, "attribute": "plain text", "valid": true, "id": "bIAHOtLR", "sourceID": "", "textAttribute": "", "order": 96}, {"x": 500.73943527835263, "y": 285.5969125522802, "width": 467.5634971655553, "height": 36.97358641365965, "attribute": "plain text", "valid": true, "id": "Z5OlGNiJ", "sourceID": "", "textAttribute": "", "order": 97}, {"x": 500.6732518958505, "y": 323.00519927890065, "width": 468.13271974665594, "height": 24.11870059077717, "attribute": "plain text", "valid": true, "id": "o8M8SKS6", "sourceID": "", "textAttribute": "", "order": 98}, {"x": 500.5813512877322, "y": 347.8449297885442, "width": 468.14422191722036, "height": 36.22120827620014, "attribute": "plain text", "valid": true, "id": "7kCIufZl", "sourceID": "", "textAttribute": "", "order": 99}, {"x": 500.138302398086, "y": 384.7302325346057, "width": 469.2347542721096, "height": 36.67919751141975, "attribute": "plain text", "valid": true, "id": "s25z7LFL", "sourceID": "", "textAttribute": "", "order": 100}, {"x": 524.0403948403576, "y": 422.3272536565304, "width": 101.41090783660746, "height": 10.73537020576563, "attribute": "plain text", "valid": true, "id": "T3S2V4B2", "sourceID": "", "textAttribute": "", "order": 101}, {"x": 500.6526240349393, "y": 434.8636357909917, "width": 467.7264656999918, "height": 23.503789270609115, "attribute": "plain text", "valid": true, "id": "OXpEPopA", "sourceID": "", "textAttribute": "", "order": 102}, {"x": 500.66644848369003, "y": 459.3441388861485, "width": 468.47724401227765, "height": 23.957924939042183, "attribute": "plain text", "valid": true, "id": "abcvA4xN", "sourceID": "", "textAttribute": "", "order": 103}, {"x": 524.1569817923177, "y": 484.19878091076384, "width": 313.810921948699, "height": 12.08946490448353, "attribute": "plain text", "valid": true, "id": "qQU9R3oW", "sourceID": "", "textAttribute": "", "order": 104}, {"x": 523.68934855386, "y": 496.67201607507025, "width": 362.30468326812274, "height": 11.569274783332292, "attribute": "plain text", "valid": true, "id": "rzxMopcH", "sourceID": "", "textAttribute": "", "order": 105}, {"x": 500.1784669001798, "y": 508.9790023307906, "width": 468.3071285858944, "height": 24.67733175892286, "attribute": "plain text", "valid": true, "id": "zgK8Bo4J", "sourceID": "", "textAttribute": "", "order": 106}, {"x": 500.1289194574196, "y": 533.848662824542, "width": 468.54493439040573, "height": 23.483594212101167, "attribute": "plain text", "valid": true, "id": "6sTtM1nL", "sourceID": "", "textAttribute": "", "order": 107}, {"x": 524.5203097838063, "y": 558.727172973874, "width": 405.38089368726105, "height": 11.377620660563183, "attribute": "plain text", "valid": true, "id": "fowjh2YA", "sourceID": "", "textAttribute": "", "order": 108}, {"x": 524.6628261767197, "y": 583.8628864922676, "width": 105.81482533626387, "height": 11.326218864293375, "attribute": "plain text", "valid": true, "id": "MyTycy9R", "sourceID": "", "textAttribute": "", "order": 109}, {"x": 524.4916331368933, "y": 595.670378014846, "width": 384.90611275821936, "height": 110.60596687192374, "attribute": "", "valid": true, "id": "8wN4Vadj", "sourceID": "", "textAttribute": "", "order": 110}, {"x": 500.32341420966054, "y": 708.13609701638, "width": 468.6775023220324, "height": 60.32643538449266, "attribute": "plain text", "valid": true, "id": "E8TeHgMP", "sourceID": "", "textAttribute": "", "order": 111}, {"x": 500.2924356840067, "y": 768.8394019089334, "width": 468.06739946548856, "height": 24.457811602371482, "attribute": "plain text", "valid": true, "id": "K5QDiPBR", "sourceID": "", "textAttribute": "", "order": 112}, {"x": 500.72365720469963, "y": 793.8828403252996, "width": 467.94535797998645, "height": 73.32732686644127, "attribute": "plain text", "valid": true, "id": "ANpNAyhA", "sourceID": "", "textAttribute": "", "order": 113}, {"x": 500.45688356222627, "y": 868.9095416067536, "width": 468.72248328592036, "height": 60.42031330298686, "attribute": "plain text", "valid": true, "id": "EpGLxLWl", "sourceID": "", "textAttribute": "", "order": 114}, {"x": 500.8381991379094, "y": 930.0235948214917, "width": 467.972920342917, "height": 98.52999992151818, "attribute": "plain text", "valid": true, "id": "wzlZX4nW", "sourceID": "", "textAttribute": "", "order": 115}, {"x": 499.87997622921137, "y": 1029.7128317744036, "width": 469.16788237095335, "height": 110.21742866991069, "attribute": "plain text", "valid": true, "id": "G0d7CTL8", "sourceID": "", "textAttribute": "", "order": 116}, {"x": 500.78484667368696, "y": 1140.4091872366112, "width": 468.0794971949024, "height": 148.0488693309819, "attribute": "plain text", "valid": true, "id": "YICgEDct", "sourceID": "", "textAttribute": "", "order": 117}, {"x": 500.1511487891425, "y": 1289.7542204673025, "width": 468.7128474056569, "height": 48.57514233354746, "attribute": "plain text", "valid": true, "id": "B7cfMA6I", "sourceID": "", "textAttribute": "", "order": 118}, {"x": 500.3750590380208, "y": 1338.6827150913712, "width": 468.1994929641908, "height": 24.59625631354769, "attribute": "plain text", "valid": true, "id": "bYjeOok6", "sourceID": "", "textAttribute": "", "order": 119}, {"x": 500.08380453029827, "y": 1363.5987133797205, "width": 468.6467605518418, "height": 24.637902187463062, "attribute": "plain text", "valid": true, "id": "tuXqL71m", "sourceID": "", "textAttribute": "", "order": 120}, {"x": 523.9985152628756, "y": 1389.218722616795, "width": 94.29823521861262, "height": 10.696909050650559, "attribute": "plain text", "valid": true, "id": "u5p4jozv", "sourceID": "", "textAttribute": "", "order": 121}, {"x": 524.9569244641569, "y": 1400.7977748448886, "width": 136.4188955105849, "height": 12.02882407217187, "attribute": "plain text", "valid": true, "id": "AcV1ol3I", "sourceID": "", "textAttribute": "", "order": 122}, {"x": 500.1082217539951, "y": 1413.6238759140685, "width": 468.6294098962924, "height": 73.02259263559746, "attribute": "plain text", "valid": true, "id": "ZCaviAAM", "sourceID": "", "textAttribute": "", "order": 123}, {"x": 500.3374107655498, "y": 1487.5074359076973, "width": 468.65096971330365, "height": 85.91425932678467, "attribute": "plain text", "valid": true, "id": "gL80Rc0V", "sourceID": "", "textAttribute": "", "order": 124}, {"x": 500.58739312427963, "y": 1574.0573535119715, "width": 468.0225325903258, "height": 98.52409777975384, "attribute": "plain text", "valid": true, "id": "NEqhH9cr", "sourceID": "", "textAttribute": "", "order": 125}, {"x": 499.8125866457706, "y": 1673.035649294919, "width": 468.8227035012504, "height": 74.85919313772256, "attribute": "plain text", "valid": true, "id": "2fJkwTiA", "sourceID": "", "textAttribute": "", "order": 126}, {"x": 499.88166704447303, "y": 1748.2605195835695, "width": 469.1440914081544, "height": 35.8342214849293, "attribute": "plain text", "valid": true, "id": "nbh7ie2B", "sourceID": "", "textAttribute": "", "order": 127}, {"x": 500.227759450723, "y": 1784.209113153733, "width": 469.1536347337038, "height": 87.15209442093716, "attribute": "plain text", "valid": true, "id": "jJSLpUq1", "sourceID": "", "textAttribute": "", "order": 128}, {"x": 501.02493078917803, "y": 1872.1321703259, "width": 468.6466342901138, "height": 24.526511065179587, "attribute": "plain text", "valid": true, "id": "21C5kuAy", "sourceID": "", "textAttribute": "", "order": 129}, {"x": 500.4340320272773, "y": 2013.5260526981206, "width": 324.0951403546502, "height": 11.783585566053658, "attribute": "plain text", "valid": true, "id": "FDxlt00m", "sourceID": "", "textAttribute": "", "order": 130}, {"x": 524.0281928449479, "y": 2026.0708662909863, "width": 139.57042362228958, "height": 11.630868635190803, "attribute": "plain text", "valid": true, "id": "vccLCcwL", "sourceID": "", "textAttribute": "", "order": 131}, {"x": 524.6655007153693, "y": 2038.8170236994144, "width": 78.54819502943926, "height": 11.152887732374744, "attribute": "plain text", "valid": true, "id": "EPwz19OD", "sourceID": "", "textAttribute": "", "order": 132}, {"x": 499.93811088829824, "y": 2050.8853675495516, "width": 466.75368523642595, "height": 23.87394473778366, "attribute": "plain text", "valid": true, "id": "r8URzXcB", "sourceID": "", "textAttribute": "", "order": 133}, {"x": 526.7602631818921, "y": 2075.744081093404, "width": 76.15829051535896, "height": 11.312214699980096, "attribute": "plain text", "valid": true, "id": "5vTfWNk5", "sourceID": "", "textAttribute": "", "order": 134}, {"x": 524.2110317002065, "y": 2087.852930631411, "width": 108.82031887445642, "height": 11.47154166758545, "attribute": "plain text", "valid": true, "id": "IFEziUM1", "sourceID": "", "textAttribute": "", "order": 135}, {"x": 525.6449744086547, "y": 2100.599088039839, "width": 101.17262442939945, "height": 11.312214699980096, "attribute": "plain text", "valid": true, "id": "twR4QMsF", "sourceID": "", "textAttribute": "", "order": 136}, {"x": 523.5737238297851, "y": 2112.8672645454503, "width": 144.00462197545713, "height": 11.165024450158947, "attribute": "plain text", "valid": true, "id": "OeAgD8vG", "sourceID": "", "textAttribute": "", "order": 137}, {"x": 526.1624608000066, "y": 2124.8771099779588, "width": 136.42672395516712, "height": 11.641202493180428, "attribute": "plain text", "valid": true, "id": "T05UKL6E", "sourceID": "", "textAttribute": "", "order": 138}, {"x": 525.334415957802, "y": 2137.462036905815, "width": 286.79360904518416, "height": 197.60933831741454, "attribute": "", "valid": true, "id": "cNgDk80C", "sourceID": "", "textAttribute": "", "order": 139}, {"x": 526.4688765702265, "y": 2335.8571533115905, "width": 124.27186181956117, "height": 11.392217849291718, "attribute": "plain text", "valid": true, "id": "4DmQwzRZ", "sourceID": "", "textAttribute": "", "order": 140}, {"x": 524.9310183912468, "y": 2348.299534651942, "width": 428.45174575194926, "height": 12.020643488780141, "attribute": "plain text", "valid": true, "id": "sAbaKJd8", "sourceID": "", "textAttribute": "", "order": 141}, {"x": 524.5911726321577, "y": 2360.883922531584, "width": 329.5884694662606, "height": 11.599226985049198, "attribute": "plain text", "valid": true, "id": "KkKFooOC", "sourceID": "", "textAttribute": "", "order": 142}, {"x": 526.1788830211916, "y": 2373.082680766899, "width": 208.6450254891137, "height": 11.515343737676334, "attribute": "plain text", "valid": true, "id": "sN86R6jx", "sourceID": "", "textAttribute": "", "order": 143}, {"x": 524.4520433587253, "y": 2386.2006945145454, "width": 136.97102320127453, "height": 11.171849315551526, "attribute": "plain text", "valid": true, "id": "yItbcH23", "sourceID": "", "textAttribute": "", "order": 144}, {"x": 523.9701837114776, "y": 2398.4411043066116, "width": 137.78090565203863, "height": 11.057921627517452, "attribute": "plain text", "valid": true, "id": "H6gsPVs7", "sourceID": "", "textAttribute": "", "order": 145}, {"x": 524.2570386251839, "y": 2410.4887808668277, "width": 66.20440962862838, "height": 10.442335903569147, "attribute": "plain text", "valid": true, "id": "cmpKm4N7", "sourceID": "", "textAttribute": "", "order": 146}, {"x": 500.9933962743137, "y": 2422.692532897207, "width": 466.9213917378712, "height": 23.720434779211, "attribute": "plain text", "valid": true, "id": "7aLPyxpT", "sourceID": "", "textAttribute": "", "order": 147}, {"x": 662.3924105021634, "y": 2447.64891615521, "width": 143.88720884614932, "height": 11.30830759665725, "attribute": "table_caption", "valid": true, "id": "f837vmv7", "sourceID": "", "textAttribute": "", "order": 148}, {"x": 527.1133937666248, "y": 2460.0722064086326, "width": 414.6171704816325, "height": 79.35217778779634, "attribute": "table", "valid": true, "id": "5tMikHoO", "sourceID": "", "textAttribute": "", "order": 149}, {"x": 524.3345083896708, "y": 2539.7685721391395, "width": 97.43065053855302, "height": 10.654064797401203, "attribute": "plain text", "valid": true, "id": "DwdBB90c", "sourceID": "", "textAttribute": "", "order": 150}, {"x": 523.2585104483406, "y": 2550.8189857727393, "width": 198.65860304846774, "height": 11.431761044988553, "attribute": "plain text", "valid": true, "id": "p3hJlWFl", "sourceID": "", "textAttribute": "", "order": 151}, {"x": 525.7989017916714, "y": 2564.0290207580597, "width": 195.5093360744618, "height": 11.080489410389507, "attribute": "plain text", "valid": true, "id": "Bskjnov0", "sourceID": "", "textAttribute": "", "order": 152}, {"x": 523.6700352730213, "y": 2576.0641020846906, "width": 208.9614373356681, "height": 12.061266224280988, "attribute": "isolate_formula", "valid": true, "id": "RLw0zTBk", "sourceID": "", "textAttribute": "", "order": 153}, {"x": 524.8761618954494, "y": 2588.742207099513, "width": 181.0679780930249, "height": 11.444427433739682, "attribute": "isolate_formula", "valid": true, "id": "PvJxEpRD", "sourceID": "", "textAttribute": "", "order": 154}, {"x": 524.9245537238564, "y": 2600.3005249956746, "width": 323.1855671610001, "height": 12.243050345669353, "attribute": "isolate_formula", "valid": true, "id": "FSQIY9j1", "sourceID": "", "textAttribute": "", "order": 155}, {"x": 524.6377982667688, "y": 2625.8304619624773, "width": 108.87413315935069, "height": 11.556472234791414, "attribute": "isolate_formula", "valid": true, "id": "eVLsajvo", "sourceID": "", "textAttribute": "", "order": 156}, {"x": 523.421327505212, "y": 2637.538993042463, "width": 176.87312871525768, "height": 11.336802484509498, "attribute": "isolate_formula", "valid": true, "id": "htwDFtmN", "sourceID": "", "textAttribute": "", "order": 157}, {"x": 524.2954930992531, "y": 2650.2498838046295, "width": 324.3245562436613, "height": 12.027333508956032, "attribute": "isolate_formula", "valid": true, "id": "I6XOYGZV", "sourceID": "", "textAttribute": "", "order": 158}, {"x": 526.4246588362378, "y": 2614.0255299499618, "width": 195.1409128833318, "height": 11.225769941408624, "attribute": "plain text", "valid": true, "id": "RW3we4z0", "sourceID": "", "textAttribute": "", "order": 159}, {"x": 524.7081362175808, "y": 2662.8317704156316, "width": 48.38419643872111, "height": 11.498713351177548, "attribute": "plain text", "valid": true, "id": "G3il52oZ", "sourceID": "", "textAttribute": "", "order": 160}, {"x": 500.1383589051756, "y": 2675.4078670740955, "width": 468.3884148346282, "height": 24.126291333575534, "attribute": "plain text", "valid": true, "id": "5YU342Gi", "sourceID": "", "textAttribute": "", "order": 161}, {"x": 524.0804612909787, "y": 2700.514239393089, "width": 272.60781818680726, "height": 10.635127068720216, "attribute": "isolate_formula", "valid": true, "id": "tFIddcH2", "sourceID": "", "textAttribute": "", "order": 162}, {"x": 524.6632791501439, "y": 2712.441364209054, "width": 242.90351891583958, "height": 11.097761008707295, "attribute": "isolate_formula", "valid": true, "id": "3iXC7KP1", "sourceID": "", "textAttribute": "", "order": 163}, {"x": 524.8595306458868, "y": 2724.578938566972, "width": 269.8451678430466, "height": 11.857970745113871, "attribute": "isolate_formula", "valid": true, "id": "X5WVGaBM", "sourceID": "", "textAttribute": "", "order": 164}, {"x": 499.8516300315817, "y": 2736.933526374061, "width": 466.89818003656836, "height": 23.874567918162658, "attribute": "plain text", "valid": true, "id": "yci4lF3s", "sourceID": "", "textAttribute": "", "order": 165}, {"x": 499.99653277517916, "y": 2761.4501383414863, "width": 468.0103638667463, "height": 23.865387635927934, "attribute": "plain text", "valid": true, "id": "o1xECujo", "sourceID": "", "textAttribute": "", "order": 166}, {"x": 524.5575968704239, "y": 2787.0701824103817, "width": 114.9214549139934, "height": 11.390445088820584, "attribute": "isolate_formula", "valid": true, "id": "zicivgXf", "sourceID": "", "textAttribute": "", "order": 167}, {"x": 524.3541960652665, "y": 2798.8674291095176, "width": 266.50139315248043, "height": 12.090498614962588, "attribute": "isolate_formula", "valid": true, "id": "xGoHzJYc", "sourceID": "", "textAttribute": "", "order": 168}, {"x": 524.8436421578824, "y": 2811.599693579872, "width": 286.5484544323992, "height": 11.551785397050804, "attribute": "isolate_formula", "valid": true, "id": "PsO4PxkF", "sourceID": "", "textAttribute": "", "order": 169}, {"x": 500.4565396529974, "y": 2823.6763179429286, "width": 466.3033230797488, "height": 24.183146466574932, "attribute": "plain text", "valid": true, "id": "qjswcWOm", "sourceID": "", "textAttribute": "", "order": 170}, {"x": 523.8779757667843, "y": 2848.8126880215013, "width": 134.36104484003064, "height": 12.198568544686992, "attribute": "plain text", "valid": true, "id": "CUrZc8RM", "sourceID": "", "textAttribute": "", "order": 171}, {"x": 986.6259127444811, "y": 273.8266611102672, "width": 468.1168312149862, "height": 123.11458227269243, "attribute": "plain text", "valid": true, "id": "hMkv4wto", "sourceID": "", "textAttribute": "", "order": 172}, {"x": 985.8023128714103, "y": 397.3859202007912, "width": 468.18690748434574, "height": 73.98772134237599, "attribute": "plain text", "valid": true, "id": "tYTOIEpy", "sourceID": "", "textAttribute": "", "order": 173}, {"x": 986.2106374913003, "y": 471.8615197324791, "width": 468.16990895416984, "height": 73.52552608869259, "attribute": "plain text", "valid": true, "id": "FkVKcvW6", "sourceID": "", "textAttribute": "", "order": 174}, {"x": 1010.1921827615614, "y": 546.2077547903627, "width": 137.33130533446987, "height": 11.121844180081998, "attribute": "plain text", "valid": true, "id": "M4HyW5kV", "sourceID": "", "textAttribute": "", "order": 175}, {"x": 986.6312959565338, "y": 558.8758858847489, "width": 467.5218833818495, "height": 48.80950235749207, "attribute": "plain text", "valid": true, "id": "nUoLt3iJ", "sourceID": "", "textAttribute": "", "order": 176}, {"x": 986.7893359300411, "y": 607.8680860469684, "width": 467.4196914945277, "height": 98.19609187844378, "attribute": "plain text", "valid": true, "id": "NdedNq5X", "sourceID": "", "textAttribute": "", "order": 177}, {"x": 986.1926477474994, "y": 707.1621035613241, "width": 469.3821939421279, "height": 60.85681629951661, "attribute": "plain text", "valid": true, "id": "pngh9L7h", "sourceID": "", "textAttribute": "", "order": 178}, {"x": 986.6173401166742, "y": 768.5615830430468, "width": 468.2553909438647, "height": 37.02955096002517, "attribute": "plain text", "valid": true, "id": "kdnYhfR4", "sourceID": "", "textAttribute": "", "order": 179}, {"x": 986.4208774863794, "y": 806.1636019003065, "width": 468.15910472541736, "height": 74.15751246308758, "attribute": "plain text", "valid": true, "id": "0T6OsaqB", "sourceID": "", "textAttribute": "", "order": 180}, {"x": 985.9391250381387, "y": 881.3084045480865, "width": 469.0884371240347, "height": 36.045665132832525, "attribute": "plain text", "valid": true, "id": "BapTO3KA", "sourceID": "", "textAttribute": "", "order": 181}, {"x": 1010.5212297689549, "y": 917.685864023189, "width": 87.05367178297432, "height": 11.693776806668192, "attribute": "plain text", "valid": true, "id": "lyJmuK0k", "sourceID": "", "textAttribute": "", "order": 182}, {"x": 1010.3985104608013, "y": 930.8458396163137, "width": 123.15166848048693, "height": 12.049665738555106, "attribute": "plain text", "valid": true, "id": "y9IjlY0u", "sourceID": "", "textAttribute": "", "order": 183}, {"x": 1010.6027420834886, "y": 943.0569756392836, "width": 122.63296533512134, "height": 11.27550058607831, "attribute": "plain text", "valid": true, "id": "K0eMvnqb", "sourceID": "", "textAttribute": "", "order": 184}, {"x": 986.5725434152131, "y": 955.3945525917934, "width": 468.11550892693407, "height": 61.0844982063468, "attribute": "plain text", "valid": true, "id": "DDpx5ZnS", "sourceID": "", "textAttribute": "", "order": 185}, {"x": 986.6053721671927, "y": 1016.6954983661147, "width": 468.28791240617045, "height": 73.80640275023586, "attribute": "plain text", "valid": true, "id": "Seb5hde0", "sourceID": "", "textAttribute": "", "order": 186}, {"x": 986.6128576903815, "y": 1090.9485358771426, "width": 468.1061977242976, "height": 61.29880063222061, "attribute": "plain text", "valid": true, "id": "qwp0BHtz", "sourceID": "", "textAttribute": "", "order": 187}, {"x": 986.4102925308339, "y": 1152.8653217654792, "width": 468.83327347151834, "height": 35.96958431852745, "attribute": "plain text", "valid": true, "id": "ocQoBQfB", "sourceID": "", "textAttribute": "", "order": 188}, {"x": 986.8429496323832, "y": 1189.883267830473, "width": 468.0891139971468, "height": 36.58498310783361, "attribute": "plain text", "valid": true, "id": "FB3xZiO0", "sourceID": "", "textAttribute": "", "order": 189}, {"x": 1010.9046706927717, "y": 1228.3030600436314, "width": 100.35240742845828, "height": 10.901377592674782, "attribute": "plain text", "valid": true, "id": "sXBrP1EQ", "sourceID": "", "textAttribute": "", "order": 190}, {"x": 986.811153418811, "y": 1239.7610679238062, "width": 468.00791982333743, "height": 148.61727334468875, "attribute": "plain text", "valid": true, "id": "e3PIeSF5", "sourceID": "", "textAttribute": "", "order": 191}, {"x": 1010.2719273080377, "y": 1389.0336458093286, "width": 124.96265624606409, "height": 11.01537674435259, "attribute": "plain text", "valid": true, "id": "0fwIuLj2", "sourceID": "", "textAttribute": "", "order": 192}, {"x": 1010.7056410633402, "y": 1400.7248351369026, "width": 304.7028869636667, "height": 11.71412127545699, "attribute": "plain text", "valid": true, "id": "229vBJEZ", "sourceID": "", "textAttribute": "", "order": 193}, {"x": 1010.4289127363678, "y": 1413.9160291323165, "width": 123.10125793996619, "height": 11.5182463569559, "attribute": "plain text", "valid": true, "id": "3SIJnguG", "sourceID": "", "textAttribute": "", "order": 194}, {"x": 1010.6088853356952, "y": 1426.514111085237, "width": 110.68314858637311, "height": 10.798355959646157, "attribute": "plain text", "valid": true, "id": "XWjPX2X1", "sourceID": "", "textAttribute": "", "order": 195}, {"x": 1010.2489401370403, "y": 1438.032357442193, "width": 123.10125793996619, "height": 11.5182463569559, "attribute": "plain text", "valid": true, "id": "eXuEk4n1", "sourceID": "", "textAttribute": "", "order": 196}, {"x": 985.6474230245005, "y": 1450.6389981582893, "width": 468.69548880404324, "height": 61.74482767875907, "attribute": "plain text", "valid": true, "id": "BNgjhLDJ", "sourceID": "", "textAttribute": "", "order": 197}, {"x": 985.9785287087562, "y": 1512.6900479183785, "width": 468.5601412397926, "height": 36.912385226662145, "attribute": "plain text", "valid": true, "id": "3P6ovbcb", "sourceID": "", "textAttribute": "", "order": 198}, {"x": 986.2830771670075, "y": 1549.9051063299298, "width": 468.00552669595095, "height": 48.19564053652231, "attribute": "plain text", "valid": true, "id": "EQkBZVzn", "sourceID": "", "textAttribute": "", "order": 199}, {"x": 985.77044281254, "y": 1599.6045756842948, "width": 468.92902248272014, "height": 49.390482589239575, "attribute": "plain text", "valid": true, "id": "PzKLX1sN", "sourceID": "", "textAttribute": "", "order": 200}, {"x": 1010.2336582587409, "y": 1649.2905331860634, "width": 205.51773706005346, "height": 10.673611047379639, "attribute": "plain text", "valid": true, "id": "z0cLcK9C", "sourceID": "", "textAttribute": "", "order": 201}, {"x": 1009.9807464566754, "y": 1660.8781979931607, "width": 118.51215506256024, "height": 11.062366193952869, "attribute": "plain text", "valid": true, "id": "UfEkJObA", "sourceID": "", "textAttribute": "", "order": 202}, {"x": 986.1133889054768, "y": 1673.6872511059064, "width": 468.3401497979818, "height": 23.75587580182784, "attribute": "plain text", "valid": true, "id": "Xmgr0f2E", "sourceID": "", "textAttribute": "", "order": 203}, {"x": 1009.6263783341329, "y": 1698.540809931224, "width": 117.84651041009953, "height": 11.490385081603046, "attribute": "plain text", "valid": true, "id": "2MgI11uS", "sourceID": "", "textAttribute": "", "order": 204}, {"x": 1010.6154571971028, "y": 1711.128954884087, "width": 433.923460717158, "height": 11.307040322888836, "attribute": "plain text", "valid": true, "id": "dSCJe26D", "sourceID": "", "textAttribute": "", "order": 205}, {"x": 986.2664717079782, "y": 1723.3625388300106, "width": 468.1687958670597, "height": 24.471432323586193, "attribute": "plain text", "valid": true, "id": "XdpXAslp", "sourceID": "", "textAttribute": "", "order": 206}, {"x": 986.2744282753098, "y": 1748.023361682125, "width": 468.1267538800336, "height": 36.24033846935245, "attribute": "plain text", "valid": true, "id": "zwrVTFiv", "sourceID": "", "textAttribute": "", "order": 207}, {"x": 986.5673886010838, "y": 1784.5920111134737, "width": 467.65308571404, "height": 25.158054826835386, "attribute": "plain text", "valid": true, "id": "Uk7nXUXG", "sourceID": "", "textAttribute": "", "order": 208}, {"x": 1010.4923645263998, "y": 1810.1697310196978, "width": 167.3395534472935, "height": 10.924308381380474, "attribute": "plain text", "valid": true, "id": "9sW1MOKl", "sourceID": "", "textAttribute": "", "order": 209}, {"x": 986.283003911679, "y": 1821.6033488114444, "width": 467.6913245375008, "height": 36.44313821928195, "attribute": "plain text", "valid": true, "id": "ZVRDXJFl", "sourceID": "", "textAttribute": "", "order": 210}, {"x": 1009.7384347735675, "y": 1859.6740226143493, "width": 255.41181946676656, "height": 11.610534341220015, "attribute": "plain text", "valid": true, "id": "vxtRg8yV", "sourceID": "", "textAttribute": "", "order": 211}, {"x": 1011.4125130062988, "y": 1871.8748440999732, "width": 205.27658866847906, "height": 11.621280606973661, "attribute": "plain text", "valid": true, "id": "s34wLYhD", "sourceID": "", "textAttribute": "", "order": 212}, {"x": 1010.8249115185786, "y": 1884.587580084952, "width": 434.96270745129345, "height": 12.11226035649501, "attribute": "plain text", "valid": true, "id": "c0gF27PN", "sourceID": "", "textAttribute": "", "order": 213}, {"x": 984.6366580213898, "y": 2013.157078489457, "width": 468.34064966896034, "height": 24.674896352065538, "attribute": "plain text", "valid": true, "id": "lhofpdNS", "sourceID": "", "textAttribute": "", "order": 214}, {"x": 1009.270993195399, "y": 2038.6824251797045, "width": 145.772555007223, "height": 11.819396351937, "attribute": "plain text", "valid": true, "id": "rL9eHJbA", "sourceID": "", "textAttribute": "", "order": 215}, {"x": 984.6524765645402, "y": 2050.583459977672, "width": 467.8866470597185, "height": 24.74335959969314, "attribute": "plain text", "valid": true, "id": "E5rVHotl", "sourceID": "", "textAttribute": "", "order": 216}, {"x": 1009.111596580962, "y": 2075.756784059908, "width": 61.235344886103995, "height": 11.070005139593171, "attribute": "plain text", "valid": true, "id": "V7YGqs1b", "sourceID": "", "textAttribute": "", "order": 217}, {"x": 985.5332600238955, "y": 2087.6901787039114, "width": 467.32139473903163, "height": 24.42568414870563, "attribute": "plain text", "valid": true, "id": "t6zJ2XNE", "sourceID": "", "textAttribute": "", "order": 218}, {"x": 985.2030380413106, "y": 2112.727248542761, "width": 467.7483118934008, "height": 23.701118869911767, "attribute": "plain text", "valid": true, "id": "2LQFh2ym", "sourceID": "", "textAttribute": "", "order": 219}, {"x": 1009.025757353766, "y": 2137.340146234742, "width": 176.5067388419352, "height": 11.933644681282862, "attribute": "plain text", "valid": true, "id": "D8z1Ganp", "sourceID": "", "textAttribute": "", "order": 220}, {"x": 1011.7434741276659, "y": 2149.4730905069164, "width": 257.19691329524545, "height": 11.70250801292922, "attribute": "plain text", "valid": true, "id": "AmrniiZx", "sourceID": "", "textAttribute": "", "order": 221}, {"x": 985.8021033938996, "y": 2162.569322786861, "width": 467.1799798819945, "height": 23.99075162979416, "attribute": "plain text", "valid": true, "id": "aPq7UWcg", "sourceID": "", "textAttribute": "", "order": 222}, {"x": 1010.878667593949, "y": 2186.922216552344, "width": 84.38270990847491, "height": 11.356446478312636, "attribute": "plain text", "valid": true, "id": "JdgmTMK6", "sourceID": "", "textAttribute": "", "order": 223}, {"x": 1009.9996443596153, "y": 2199.3369128837257, "width": 167.46553190407622, "height": 11.996349975693802, "attribute": "plain text", "valid": true, "id": "7FXUROlW", "sourceID": "", "textAttribute": "", "order": 224}, {"x": 1008.5088721480411, "y": 2211.7478959008713, "width": 97.85603250580824, "height": 12.009603989349195, "attribute": "plain text", "valid": true, "id": "SxSx3mOk", "sourceID": "", "textAttribute": "", "order": 225}, {"x": 1011.6224731823169, "y": 2224.606903809611, "width": 239.59825297158827, "height": 11.60500021771216, "attribute": "plain text", "valid": true, "id": "eaQXmv4R", "sourceID": "", "textAttribute": "", "order": 226}, {"x": 1012.5455226938719, "y": 2236.70435644978, "width": 328.3763685046854, "height": 11.390283037101279, "attribute": "plain text", "valid": true, "id": "sB1oGypZ", "sourceID": "", "textAttribute": "", "order": 227}, {"x": 1010.0986245496943, "y": 2248.3346343173002, "width": 129.18983873717988, "height": 11.97797756416015, "attribute": "plain text", "valid": true, "id": "J1Gkoaq6", "sourceID": "", "textAttribute": "", "order": 228}, {"x": 1008.9232655363594, "y": 2261.2741734167557, "width": 190.58695478491637, "height": 11.783238351175868, "attribute": "plain text", "valid": true, "id": "UHLT7HMH", "sourceID": "", "textAttribute": "", "order": 229}, {"x": 1009.5470186312647, "y": 2273.5001250214546, "width": 117.07179728610627, "height": 11.961946426752707, "attribute": "plain text", "valid": true, "id": "wMSWbQl4", "sourceID": "", "textAttribute": "", "order": 230}, {"x": 1011.4920434275123, "y": 2286.0950190703284, "width": 167.03075014340493, "height": 12.17684535263872, "attribute": "plain text", "valid": true, "id": "yy4VqO6D", "sourceID": "", "textAttribute": "", "order": 231}, {"x": 1010.6031033722574, "y": 2298.7108543178765, "width": 127.64987721448209, "height": 11.64567441097368, "attribute": "plain text", "valid": true, "id": "gWrdwimU", "sourceID": "", "textAttribute": "", "order": 232}, {"x": 1009.0446560583239, "y": 2310.7017666941547, "width": 117.27019350917888, "height": 11.358735119975432, "attribute": "plain text", "valid": true, "id": "zeiQ0jDY", "sourceID": "", "textAttribute": "", "order": 233}, {"x": 1011.4604060730491, "y": 2323.4845862660795, "width": 329.2312123406087, "height": 11.621313933056966, "attribute": "plain text", "valid": true, "id": "gJdtxylH", "sourceID": "", "textAttribute": "", "order": 234}, {"x": 985.2820048444812, "y": 2335.759618214111, "width": 467.39022087892505, "height": 23.416169340381828, "attribute": "plain text", "valid": true, "id": "A3hl6yds", "sourceID": "", "textAttribute": "", "order": 235}, {"x": 1010.3064284422727, "y": 2360.5459790302766, "width": 89.34105692246065, "height": 11.555152472621094, "attribute": "plain text", "valid": true, "id": "6mUULYrE", "sourceID": "", "textAttribute": "", "order": 236}, {"x": 1009.8836789615676, "y": 2373.1135735481275, "width": 347.1620993482841, "height": 11.3882093888038, "attribute": "plain text", "valid": true, "id": "QG8VnyPh", "sourceID": "", "textAttribute": "", "order": 237}, {"x": 1009.3368338792307, "y": 2386.046279767476, "width": 433.4150254209197, "height": 11.806828363911897, "attribute": "plain text", "valid": true, "id": "S6tZ6SWy", "sourceID": "", "textAttribute": "", "order": 238}, {"x": 1009.996972363277, "y": 2398.0854595589462, "width": 244.35627492775333, "height": 11.189841082875617, "attribute": "plain text", "valid": true, "id": "1smdOcEa", "sourceID": "", "textAttribute": "", "order": 239}, {"x": 1011.952275226161, "y": 2410.381251169144, "width": 188.9463930027195, "height": 10.970177245484255, "attribute": "plain text", "valid": true, "id": "2zRHSyK1", "sourceID": "", "textAttribute": "", "order": 240}, {"x": 1011.9309021444049, "y": 2422.355606490693, "width": 197.56082084563764, "height": 11.672914341927898, "attribute": "plain text", "valid": true, "id": "aXfKcert", "sourceID": "", "textAttribute": "", "order": 241}, {"x": 1011.7290554116387, "y": 2435.0407609693966, "width": 201.55517583906433, "height": 11.804206431667676, "attribute": "plain text", "valid": true, "id": "0IUPFnEK", "sourceID": "", "textAttribute": "", "order": 242}, {"x": 1009.1875821754513, "y": 2447.7654367327787, "width": 102.04262904475391, "height": 11.228329630455741, "attribute": "plain text", "valid": true, "id": "kRk8jxDR", "sourceID": "", "textAttribute": "", "order": 243}, {"x": 1009.8703010436109, "y": 2459.5570533019068, "width": 245.39798730648837, "height": 11.976051096852611, "attribute": "plain text", "valid": true, "id": "QEMxNXZm", "sourceID": "", "textAttribute": "", "order": 244}, {"x": 1011.5003103490769, "y": 2472.1093227880046, "width": 141.87135689916622, "height": 11.353371514122554, "attribute": "plain text", "valid": true, "id": "RbkvR8PS", "sourceID": "", "textAttribute": "", "order": 245}, {"x": 1012.1605657680593, "y": 2484.331947236376, "width": 170.82981764677177, "height": 11.93615335949313, "attribute": "plain text", "valid": true, "id": "CGN0c2sK", "sourceID": "", "textAttribute": "", "order": 246}, {"x": 1011.8027053127487, "y": 2496.694116748918, "width": 219.56764899988906, "height": 11.504021074334306, "attribute": "plain text", "valid": true, "id": "8Fcl9QPE", "sourceID": "", "textAttribute": "", "order": 247}, {"x": 1011.5671999375666, "y": 2509.6696206926617, "width": 201.62515426642608, "height": 11.4312836997516, "attribute": "plain text", "valid": true, "id": "kxVlfPDU", "sourceID": "", "textAttribute": "", "order": 248}, {"x": 1009.5773941425952, "y": 2521.594441661989, "width": 89.84651813404669, "height": 10.927890831254343, "attribute": "plain text", "valid": true, "id": "88kyvAYP", "sourceID": "", "textAttribute": "", "order": 249}, {"x": 986.089170006003, "y": 2533.755969784195, "width": 465.88363632465786, "height": 24.434877040884285, "attribute": "plain text", "valid": true, "id": "ZPzZ1v0n", "sourceID": "", "textAttribute": "", "order": 250}, {"x": 1012.0388685878218, "y": 2559.3375481653243, "width": 170.4989962860776, "height": 10.464483775762922, "attribute": "plain text", "valid": true, "id": "OMP1IOIx", "sourceID": "", "textAttribute": "", "order": 251}, {"x": 1011.5664405895977, "y": 2570.7697009611575, "width": 196.05813013183865, "height": 11.589138174658624, "attribute": "plain text", "valid": true, "id": "QTi9wvfU", "sourceID": "", "textAttribute": "", "order": 252}, {"x": 1011.9447886608604, "y": 2583.4251995831605, "width": 219.6311343393955, "height": 11.717786075959726, "attribute": "plain text", "valid": true, "id": "9Eo5Zh44", "sourceID": "", "textAttribute": "", "order": 253}, {"x": 985.7355294163333, "y": 2595.5664078914565, "width": 466.6238324170159, "height": 24.268992109970572, "attribute": "plain text", "valid": true, "id": "w7USZFqt", "sourceID": "", "textAttribute": "", "order": 254}, {"x": 1009.5215622900329, "y": 2620.4395669161095, "width": 65.77794600050368, "height": 11.813777441332146, "attribute": "plain text", "valid": true, "id": "gmmvekrX", "sourceID": "", "textAttribute": "", "order": 255}, {"x": 1009.2298640816048, "y": 2632.554835727563, "width": 276.02800993101584, "height": 11.803984279637751, "attribute": "plain text", "valid": true, "id": "TvKPjmr3", "sourceID": "", "textAttribute": "", "order": 256}, {"x": 1011.4565447475126, "y": 2645.481807865413, "width": 317.1369982798314, "height": 11.827811165590619, "attribute": "plain text", "valid": true, "id": "iFcW6L0m", "sourceID": "", "textAttribute": "", "order": 257}, {"x": 1010.2213479173183, "y": 2657.818645936063, "width": 306.01028121913305, "height": 11.508758413804932, "attribute": "plain text", "valid": true, "id": "nd8rjYGf", "sourceID": "", "textAttribute": "", "order": 258}, {"x": 1009.9159166593982, "y": 2670.22575813953, "width": 138.37627066487153, "height": 11.84229808857828, "attribute": "plain text", "valid": true, "id": "RvltKpAr", "sourceID": "", "textAttribute": "", "order": 259}, {"x": 1009.0398251803534, "y": 2682.3667919049008, "width": 280.83416776549484, "height": 12.217735356515416, "attribute": "plain text", "valid": true, "id": "8LkddAej", "sourceID": "", "textAttribute": "", "order": 260}, {"x": 1009.8967047299282, "y": 2694.5270987633103, "width": 365.85893899087677, "height": 12.106927124617744, "attribute": "plain text", "valid": true, "id": "6myz36uF", "sourceID": "", "textAttribute": "", "order": 261}, {"x": 985.687820581207, "y": 2707.5134716817906, "width": 466.7808458475385, "height": 35.74953358281836, "attribute": "plain text", "valid": true, "id": "sKoEwA1C", "sourceID": "", "textAttribute": "", "order": 262}, {"x": 1011.8182890088601, "y": 2744.2729612781827, "width": 411.34706106166544, "height": 11.432276914814498, "attribute": "plain text", "valid": true, "id": "BRxtmYnt", "sourceID": "", "textAttribute": "", "order": 263}, {"x": 1011.8498543291278, "y": 2756.6295124470894, "width": 244.3245851606066, "height": 11.638268069630984, "attribute": "plain text", "valid": true, "id": "EV6XYUVl", "sourceID": "", "textAttribute": "", "order": 264}, {"x": 985.7836043582205, "y": 2769.693468247417, "width": 466.99778169503645, "height": 23.476480458149364, "attribute": "plain text", "valid": true, "id": "AZjz1VP4", "sourceID": "", "textAttribute": "", "order": 265}, {"x": 1012.4363573715262, "y": 2793.787535833707, "width": 261.44219707561876, "height": 11.632412562419379, "attribute": "plain text", "valid": true, "id": "uswRqgNh", "sourceID": "", "textAttribute": "", "order": 266}, {"x": 985.4439409365503, "y": 2806.8269852608037, "width": 467.3357927912913, "height": 23.395928362852445, "attribute": "plain text", "valid": true, "id": "GbpISnxV", "sourceID": "", "textAttribute": "", "order": 267}, {"x": 985.3960520760975, "y": 2831.085323542342, "width": 468.076130679216, "height": 24.185691695478404, "attribute": "plain text", "valid": true, "id": "nk47zZmk", "sourceID": "", "textAttribute": "", "order": 268}, {"x": 1009.2284072758443, "y": 2855.6301268896527, "width": 442.9692918893483, "height": 12.497768899506465, "attribute": "plain text", "valid": true, "id": "HnTGnK1g", "sourceID": "", "textAttribute": "", "order": 269}, {"x": 1471.9438960897685, "y": 273.8516758915058, "width": 468.46045097091854, "height": 23.93435931741903, "attribute": "plain text", "valid": true, "id": "jHIv1Lic", "sourceID": "", "textAttribute": "", "order": 270}, {"x": 1471.9952448078639, "y": 298.7200382052223, "width": 468.5964058519998, "height": 23.61063878419279, "attribute": "plain text", "valid": true, "id": "sAxgAtsa", "sourceID": "", "textAttribute": "", "order": 271}, {"x": 1496.8391002124495, "y": 323.10278152731917, "width": 310.08422153160285, "height": 11.0873865595808, "attribute": "plain text", "valid": true, "id": "oF9SP9ZK", "sourceID": "", "textAttribute": "", "order": 272}, {"x": 1471.717355123858, "y": 335.51449193950793, "width": 467.5916155677232, "height": 23.95806828631359, "attribute": "plain text", "valid": true, "id": "s7wtjw3B", "sourceID": "", "textAttribute": "", "order": 273}, {"x": 1472.1517187689992, "y": 360.0878495654774, "width": 469.0095767105868, "height": 24.330751949855713, "attribute": "plain text", "valid": true, "id": "nzJlfi80", "sourceID": "", "textAttribute": "", "order": 274}, {"x": 1471.9366599444227, "y": 384.6307439734134, "width": 468.1088894311504, "height": 36.929346935049374, "attribute": "plain text", "valid": true, "id": "Ds7jKLwB", "sourceID": "", "textAttribute": "", "order": 275}, {"x": 1497.6253220858687, "y": 422.1008086427657, "width": 433.80444843304593, "height": 11.327324817589368, "attribute": "plain text", "valid": true, "id": "fJRYJoeA", "sourceID": "", "textAttribute": "", "order": 276}, {"x": 1471.9339434499227, "y": 434.96351088407636, "width": 468.3471286535734, "height": 23.359632959415112, "attribute": "plain text", "valid": true, "id": "djTwmeAz", "sourceID": "", "textAttribute": "", "order": 277}, {"x": 1471.4440882867182, "y": 459.314583779482, "width": 469.1501444571819, "height": 24.13633386466329, "attribute": "plain text", "valid": true, "id": "cO5NCDJv", "sourceID": "", "textAttribute": "", "order": 278}, {"x": 1471.4204428365629, "y": 484.0931502179658, "width": 468.9806969838466, "height": 36.02451343545383, "attribute": "plain text", "valid": true, "id": "TwN2qYVb", "sourceID": "", "textAttribute": "", "order": 279}, {"x": 1471.9939900913469, "y": 521.3602934424662, "width": 468.32180058964923, "height": 24.28451872626727, "attribute": "plain text", "valid": true, "id": "qnJoAZcc", "sourceID": "", "textAttribute": "", "order": 280}, {"x": 1472.1326427229317, "y": 545.9395341098174, "width": 468.34388443133713, "height": 24.491486842054936, "attribute": "plain text", "valid": true, "id": "mOZMZk3N", "sourceID": "", "textAttribute": "", "order": 281}, {"x": 1471.665945757793, "y": 570.8839517035655, "width": 469.1387716935773, "height": 36.615215390066375, "attribute": "plain text", "valid": true, "id": "brPIXkr7", "sourceID": "", "textAttribute": "", "order": 282}, {"x": 1496.303476056052, "y": 608.0765179435094, "width": 235.82480650257577, "height": 11.22185199768419, "attribute": "plain text", "valid": true, "id": "pne3YW5P", "sourceID": "", "textAttribute": "", "order": 283}, {"x": 1496.0021618848036, "y": 620.8957564394818, "width": 199.6453360840417, "height": 11.112426769576851, "attribute": "plain text", "valid": true, "id": "qYV3JJSx", "sourceID": "", "textAttribute": "", "order": 284}, {"x": 1495.812347488499, "y": 632.4623542584542, "width": 355.0770200463502, "height": 12.212500697238058, "attribute": "plain text", "valid": true, "id": "H9RMg4nn", "sourceID": "", "textAttribute": "", "order": 285}, {"x": 1495.9785760363538, "y": 645.9061292745415, "width": 118.56441377125593, "height": 11.24840109802176, "attribute": "plain text", "valid": true, "id": "Ex829APn", "sourceID": "", "textAttribute": "", "order": 286}, {"x": 1472.3091616627833, "y": 657.5506495376111, "width": 466.97327242633463, "height": 23.783464464754726, "attribute": "plain text", "valid": true, "id": "tM9Vb1hP", "sourceID": "", "textAttribute": "", "order": 287}, {"x": 1471.1113659405896, "y": 682.0033291004287, "width": 469.1392250532749, "height": 24.567256132173377, "attribute": "plain text", "valid": true, "id": "LVZ6PP7U", "sourceID": "", "textAttribute": "", "order": 288}, {"x": 1497.8417594667383, "y": 707.6259936030702, "width": 389.8465450719979, "height": 11.78118697016418, "attribute": "plain text", "valid": true, "id": "aSdUEnzo", "sourceID": "", "textAttribute": "", "order": 289}, {"x": 1498.2709924340038, "y": 719.9568793732365, "width": 214.62355524638852, "height": 10.956894199941914, "attribute": "plain text", "valid": true, "id": "FzhvnAlP", "sourceID": "", "textAttribute": "", "order": 290}, {"x": 1497.6196109448993, "y": 732.0268064966609, "width": 401.3813818008546, "height": 11.192592213903831, "attribute": "plain text", "valid": true, "id": "7Xhxt1RM", "sourceID": "", "textAttribute": "", "order": 291}, {"x": 1497.5327547354896, "y": 744.7306488098399, "width": 278.2835215622973, "height": 11.216131182294461, "attribute": "plain text", "valid": true, "id": "6lZ81t3i", "sourceID": "", "textAttribute": "", "order": 292}, {"x": 1497.9607649524846, "y": 757.1340902063607, "width": 134.6065539806266, "height": 11.05383187302352, "attribute": "plain text", "valid": true, "id": "jC83647x", "sourceID": "", "textAttribute": "", "order": 293}, {"x": 1472.3427015571685, "y": 768.6164083720796, "width": 468.9719577546074, "height": 24.993963658787283, "attribute": "plain text", "valid": true, "id": "Nj3dSoYq", "sourceID": "", "textAttribute": "", "order": 294}, {"x": 1498.7961302780789, "y": 793.8689485203882, "width": 196.80497095959092, "height": 12.483083918596597, "attribute": "plain text", "valid": true, "id": "z8gUjmI7", "sourceID": "", "textAttribute": "", "order": 295}, {"x": 1498.6917421285154, "y": 806.5074834007867, "width": 294.9365427522827, "height": 11.664915724445052, "attribute": "plain text", "valid": true, "id": "4Lcfe3IW", "sourceID": "", "textAttribute": "", "order": 296}, {"x": 1471.633201747902, "y": 818.8470555044855, "width": 468.5698869822667, "height": 23.79511629488605, "attribute": "plain text", "valid": true, "id": "sseRusei", "sourceID": "", "textAttribute": "", "order": 297}, {"x": 1472.090609278467, "y": 843.8632299929204, "width": 468.28194189667016, "height": 23.343415672763697, "attribute": "plain text", "valid": true, "id": "XsZoCksg", "sourceID": "", "textAttribute": "", "order": 298}, {"x": 1496.1877122554454, "y": 868.3848910918006, "width": 305.1664952237319, "height": 11.70244471200586, "attribute": "plain text", "valid": true, "id": "4RrcaejT", "sourceID": "", "textAttribute": "", "order": 299}, {"x": 1496.704763359083, "y": 880.7264439726039, "width": 92.88635986911521, "height": 11.666494303292145, "attribute": "plain text", "valid": true, "id": "izfAblee", "sourceID": "", "textAttribute": "", "order": 300}, {"x": 1471.567306084237, "y": 892.7903703441216, "width": 468.9377714069916, "height": 24.363202473761234, "attribute": "plain text", "valid": true, "id": "vy2Jcssl", "sourceID": "", "textAttribute": "", "order": 301}, {"x": 1495.6862457788664, "y": 917.5053154065333, "width": 310.6582040589735, "height": 12.021311305919493, "attribute": "plain text", "valid": true, "id": "bDrEAV0X", "sourceID": "", "textAttribute": "", "order": 302}, {"x": 1472.357341484567, "y": 930.8282094950497, "width": 467.8781594573993, "height": 35.80526673388464, "attribute": "plain text", "valid": true, "id": "tljC7aiP", "sourceID": "", "textAttribute": "", "order": 303}, {"x": 1495.7250827471448, "y": 967.9994324293431, "width": 267.85346655862054, "height": 10.869438136885975, "attribute": "plain text", "valid": true, "id": "bSuoUOe5", "sourceID": "", "textAttribute": "", "order": 304}, {"x": 1495.6794116056617, "y": 979.6160063720412, "width": 168.93467355813547, "height": 11.925581082839471, "attribute": "plain text", "valid": true, "id": "mP2ZSNvo", "sourceID": "", "textAttribute": "", "order": 305}, {"x": 1496.3264823888437, "y": 991.8518629676338, "width": 100.43239968998397, "height": 11.558566406506634, "attribute": "plain text", "valid": true, "id": "03BJnMCS", "sourceID": "", "textAttribute": "", "order": 306}, {"x": 1498.6247343777038, "y": 1004.5640107357422, "width": 85.53898361952736, "height": 11.423515734324345, "attribute": "plain text", "valid": true, "id": "XBIkh3jV", "sourceID": "", "textAttribute": "", "order": 307}, {"x": 1495.8561773220372, "y": 1015.9731620415434, "width": 421.87530696835, "height": 12.57444490784478, "attribute": "plain text", "valid": true, "id": "qPY0gf0V", "sourceID": "", "textAttribute": "", "order": 308}, {"x": 1498.0149929101185, "y": 1029.4499173063773, "width": 85.7466984699505, "height": 11.76915469195399, "attribute": "plain text", "valid": true, "id": "aEyvjKAr", "sourceID": "", "textAttribute": "", "order": 309}, {"x": 1472.3704019083677, "y": 1042.1576981544636, "width": 468.4600312780551, "height": 23.471276009357506, "attribute": "plain text", "valid": true, "id": "qwtbqMNn", "sourceID": "", "textAttribute": "", "order": 310}, {"x": 1497.867841472276, "y": 1066.6329246178163, "width": 97.916357843461, "height": 11.176122321243083, "attribute": "plain text", "valid": true, "id": "vr2osyvN", "sourceID": "", "textAttribute": "", "order": 311}, {"x": 1472.0929411928, "y": 1078.9245978888332, "width": 468.3542435099397, "height": 24.470519862237875, "attribute": "plain text", "valid": true, "id": "n5edgaQk", "sourceID": "", "textAttribute": "", "order": 312}, {"x": 1498.2651729277868, "y": 1103.8261087193428, "width": 148.22481109959725, "height": 11.308444268345573, "attribute": "plain text", "valid": true, "id": "iAvxMnib", "sourceID": "", "textAttribute": "", "order": 313}, {"x": 1496.412898624799, "y": 1115.3886026854586, "width": 346.5554477309261, "height": 11.944399722605477, "attribute": "plain text", "valid": true, "id": "Zr2x4Epc", "sourceID": "", "textAttribute": "", "order": 314}, {"x": 1496.7349773963163, "y": 1128.278757456079, "width": 200.00193724308048, "height": 11.941306398748067, "attribute": "plain text", "valid": true, "id": "DSAdB8De", "sourceID": "", "textAttribute": "", "order": 315}, {"x": 1472.7081911512635, "y": 1140.5598303750778, "width": 468.0991155782624, "height": 36.92651970428947, "attribute": "plain text", "valid": true, "id": "EhtKLiwf", "sourceID": "", "textAttribute": "", "order": 316}, {"x": 1497.9553192528717, "y": 1177.9558234307758, "width": 60.72254553699552, "height": 11.795026830927187, "attribute": "plain text", "valid": true, "id": "dJTqph3l", "sourceID": "", "textAttribute": "", "order": 317}, {"x": 1496.6152772547432, "y": 1191.111075061438, "width": 359.3142709963954, "height": 11.342155286244788, "attribute": "plain text", "valid": true, "id": "IBlpOSh0", "sourceID": "", "textAttribute": "", "order": 318}, {"x": 1498.2073189503378, "y": 1203.0239480802654, "width": 110.77168855466054, "height": 11.059613912747409, "attribute": "plain text", "valid": true, "id": "72XYkw5p", "sourceID": "", "textAttribute": "", "order": 319}, {"x": 1472.3005611447652, "y": 1215.189401162672, "width": 468.66911443766867, "height": 36.04257612056892, "attribute": "plain text", "valid": true, "id": "lGghvzmV", "sourceID": "", "textAttribute": "", "order": 320}, {"x": 1498.0879916802933, "y": 1252.3173958265704, "width": 60.69345532047486, "height": 11.718043353953068, "attribute": "plain text", "valid": true, "id": "UKqwMTTP", "sourceID": "", "textAttribute": "", "order": 321}, {"x": 1471.6472784713735, "y": 1264.7023601012886, "width": 469.31834386967313, "height": 23.820785062496018, "attribute": "plain text", "valid": true, "id": "8iFpkx0j", "sourceID": "", "textAttribute": "", "order": 322}, {"x": 1497.39669806806, "y": 1289.5936187537138, "width": 87.50884342190736, "height": 11.58606182377278, "attribute": "plain text", "valid": true, "id": "Lp4IAmaj", "sourceID": "", "textAttribute": "", "order": 323}, {"x": 1471.6732696406464, "y": 1301.9288007405046, "width": 468.7766647411793, "height": 36.17807964535734, "attribute": "plain text", "valid": true, "id": "7iazpVW0", "sourceID": "", "textAttribute": "", "order": 324}, {"x": 1498.0167419130498, "y": 1338.356985984389, "width": 86.19462204954455, "height": 11.79542492777865, "attribute": "plain text", "valid": true, "id": "CLaPfhQk", "sourceID": "", "textAttribute": "", "order": 325}, {"x": 1472.6034764257104, "y": 1351.7510025534712, "width": 468.52694700363804, "height": 23.820939200381513, "attribute": "plain text", "valid": true, "id": "cLkfEsQK", "sourceID": "", "textAttribute": "", "order": 326}, {"x": 1498.0226833443562, "y": 1376.5111552932512, "width": 72.74541218664224, "height": 11.575547340648182, "attribute": "plain text", "valid": true, "id": "kukRMxnI", "sourceID": "", "textAttribute": "", "order": 327}, {"x": 1471.366502244214, "y": 1388.818613051229, "width": 468.7048179975066, "height": 36.78711114534323, "attribute": "plain text", "valid": true, "id": "uQE5MqIF", "sourceID": "", "textAttribute": "", "order": 328}, {"x": 1495.1467459086523, "y": 1425.970172825738, "width": 188.33042025377546, "height": 11.755179844439139, "attribute": "plain text", "valid": true, "id": "h0yZnwn0", "sourceID": "", "textAttribute": "", "order": 329}, {"x": 1498.2308517529136, "y": 1437.806158611348, "width": 179.30862942858582, "height": 11.71740132015481, "attribute": "plain text", "valid": true, "id": "NVdlP2mT", "sourceID": "", "textAttribute": "", "order": 330}, {"x": 1471.281271839557, "y": 1450.4223208237888, "width": 468.982186861947, "height": 37.103314432741, "attribute": "plain text", "valid": true, "id": "YJgKd8v2", "sourceID": "", "textAttribute": "", "order": 331}, {"x": 1498.4515889287068, "y": 1487.8841253038634, "width": 216.36536695110436, "height": 11.180488612008377, "attribute": "plain text", "valid": true, "id": "6KjYloLA", "sourceID": "", "textAttribute": "", "order": 332}, {"x": 1472.0681436051498, "y": 1500.865762597769, "width": 468.11332429872766, "height": 23.376653343513397, "attribute": "plain text", "valid": true, "id": "z5sIg6XX", "sourceID": "", "textAttribute": "", "order": 333}, {"x": 1497.1251690105785, "y": 1524.83321829719, "width": 143.1996288815073, "height": 11.461999178232833, "attribute": "plain text", "valid": true, "id": "RVGssz9o", "sourceID": "", "textAttribute": "", "order": 334}, {"x": 1471.6006520492062, "y": 1537.742258888468, "width": 468.5051076672239, "height": 24.138014218763857, "attribute": "plain text", "valid": true, "id": "8YBzV9N4", "sourceID": "", "textAttribute": "", "order": 335}, {"x": 1498.2383894493523, "y": 1562.2767598196876, "width": 248.16734991409595, "height": 10.918120703258863, "attribute": "plain text", "valid": true, "id": "PMM4uQkH", "sourceID": "", "textAttribute": "", "order": 336}, {"x": 1471.6992399324708, "y": 1574.9853182745492, "width": 468.25518104328995, "height": 36.68722490550259, "attribute": "plain text", "valid": true, "id": "3pkz4pm5", "sourceID": "", "textAttribute": "", "order": 337}, {"x": 1498.0686533854685, "y": 1612.0195983563806, "width": 161.29683848990254, "height": 11.593845893977862, "attribute": "plain text", "valid": true, "id": "ewdv5e8e", "sourceID": "", "textAttribute": "", "order": 338}, {"x": 1472.2367511304647, "y": 1623.475089871371, "width": 468.6095540860445, "height": 24.953252608202966, "attribute": "plain text", "valid": true, "id": "QkMIMIGS", "sourceID": "", "textAttribute": "", "order": 339}, {"x": 1498.1212275346522, "y": 1649.25303564965, "width": 173.0803160783712, "height": 10.479333416050899, "attribute": "plain text", "valid": true, "id": "KCgtKanI", "sourceID": "", "textAttribute": "", "order": 340}, {"x": 1471.9794895691787, "y": 1660.7872606172493, "width": 468.6313435957591, "height": 36.90501543566987, "attribute": "plain text", "valid": true, "id": "pv0v9oKs", "sourceID": "", "textAttribute": "", "order": 341}, {"x": 1497.4896478058674, "y": 1698.4990968965085, "width": 112.67349378801019, "height": 11.718043353953059, "attribute": "plain text", "valid": true, "id": "Gg2QQzbO", "sourceID": "", "textAttribute": "", "order": 342}, {"x": 1472.0530166378746, "y": 1710.4809671461182, "width": 468.73076207153, "height": 25.160919963729462, "attribute": "plain text", "valid": true, "id": "s27ey0vJ", "sourceID": "", "textAttribute": "", "order": 343}, {"x": 1495.4420366092447, "y": 1747.2023014722251, "width": 131.6965507394637, "height": 12.034932835199033, "attribute": "plain text", "valid": true, "id": "GrWvRRDi", "sourceID": "", "textAttribute": "", "order": 344}, {"x": 1495.4328062672898, "y": 1760.416330131848, "width": 335.96011032901646, "height": 112.01042453887312, "attribute": "", "valid": true, "id": "DZrftGMz", "sourceID": "", "textAttribute": "", "order": 345}, {"x": 1495.2295792850584, "y": 1872.6698189693404, "width": 94.66350614378253, "height": 10.954153560679497, "attribute": "plain text", "valid": true, "id": "Ptv3oAiF", "sourceID": "", "textAttribute": "", "order": 346}, {"x": 1870.00159779198, "y": 1883.7278762200142, "width": 71.41680395386695, "height": 14.77589047321385, "attribute": "abandon", "valid": true, "id": "x5OG57rO", "sourceID": "", "textAttribute": "", "order": 347}, {"x": 1471.2498773865063, "y": 2012.990395613845, "width": 41.01165043614859, "height": 12.234080517385978, "attribute": "plain text", "valid": true, "id": "pSU71bKe", "sourceID": "", "textAttribute": "", "order": 348}, {"x": 1494.3659298825407, "y": 2025.5227383507358, "width": 97.28698158071722, "height": 11.6791369415864, "attribute": "plain text", "valid": true, "id": "X5cLy5aK", "sourceID": "", "textAttribute": "", "order": 349}, {"x": 1470.9291424825328, "y": 2038.1329090965996, "width": 468.10091437985704, "height": 23.84583032576081, "attribute": "plain text", "valid": true, "id": "pR0QrOtT", "sourceID": "", "textAttribute": "", "order": 350}, {"x": 1494.5765202060245, "y": 2063.595285935641, "width": 383.31272333897857, "height": 345.590867459319, "attribute": "", "valid": true, "id": "8mSOoFtK", "sourceID": "", "textAttribute": "", "order": 351}, {"x": 1471.996298349211, "y": 2409.693163465451, "width": 466.9469566315656, "height": 25.008801037543417, "attribute": "plain text", "valid": true, "id": "Dp25JvYs", "sourceID": "", "textAttribute": "", "order": 352}, {"x": 1493.331127722548, "y": 2435.464836667509, "width": 66.92654535849911, "height": 11.177141994698427, "attribute": "plain text", "valid": true, "id": "QJayleNL", "sourceID": "", "textAttribute": "", "order": 353}, {"x": 1497.4749408019559, "y": 2447.7546290495075, "width": 272.86290182757847, "height": 11.759515377243753, "attribute": "plain text", "valid": true, "id": "7jbxXNGN", "sourceID": "", "textAttribute": "", "order": 354}, {"x": 1495.3581718250362, "y": 2459.6379507639067, "width": 314.77426065980364, "height": 11.726985011671148, "attribute": "plain text", "valid": true, "id": "bEDNI8YJ", "sourceID": "", "textAttribute": "", "order": 355}, {"x": 1494.373779102039, "y": 2471.6553507797967, "width": 351.31407295924384, "height": 11.561807370552243, "attribute": "plain text", "valid": true, "id": "ZsaIb089", "sourceID": "", "textAttribute": "", "order": 356}, {"x": 1494.7093362953033, "y": 2484.722601719436, "width": 164.79000636494135, "height": 11.441060561317023, "attribute": "plain text", "valid": true, "id": "RGOUKVg5", "sourceID": "", "textAttribute": "", "order": 357}, {"x": 1495.133542418101, "y": 2497.189642857086, "width": 250.78898401423962, "height": 11.245655913357629, "attribute": "plain text", "valid": true, "id": "GX8YfO2m", "sourceID": "", "textAttribute": "", "order": 358}, {"x": 1470.9962190262293, "y": 2510.2141329255, "width": 467.4449878130999, "height": 35.451059306340724, "attribute": "plain text", "valid": true, "id": "M2XUTm0o", "sourceID": "", "textAttribute": "", "order": 359}, {"x": 1470.4712827202254, "y": 2547.4946985413285, "width": 468.528425779075, "height": 22.864232517077458, "attribute": "plain text", "valid": true, "id": "GwqVNHof", "sourceID": "", "textAttribute": "", "order": 360}, {"x": 1470.9481640248493, "y": 2571.1677025339177, "width": 468.0155489619878, "height": 24.44138570282381, "attribute": "plain text", "valid": true, "id": "coDBxd71", "sourceID": "", "textAttribute": "", "order": 361}, {"x": 1471.6084996430557, "y": 2596.0502202043895, "width": 467.3804734503779, "height": 36.70177488522141, "attribute": "plain text", "valid": true, "id": "ZdJ4f47X", "sourceID": "", "textAttribute": "", "order": 362}, {"x": 1470.7125267588665, "y": 2633.1003604794387, "width": 468.23066279529473, "height": 24.233716853335743, "attribute": "plain text", "valid": true, "id": "jQxuuqqV", "sourceID": "", "textAttribute": "", "order": 363}, {"x": 1470.339497731398, "y": 2658.132891522668, "width": 468.76144943840535, "height": 24.547149779130024, "attribute": "plain text", "valid": true, "id": "3ZTYiTyJ", "sourceID": "", "textAttribute": "", "order": 364}, {"x": 1470.4033129917475, "y": 2683.0778627037785, "width": 468.39811363462235, "height": 23.25037902153802, "attribute": "plain text", "valid": true, "id": "XunS0O5y", "sourceID": "", "textAttribute": "", "order": 365}, {"x": 1493.6852627414698, "y": 2707.7302538370195, "width": 370.5813470641115, "height": 11.488976488045765, "attribute": "plain text", "valid": true, "id": "bHx384vZ", "sourceID": "", "textAttribute": "", "order": 366}, {"x": 1497.000480505433, "y": 2719.713722281666, "width": 280.2518440756798, "height": 11.986248528849055, "attribute": "plain text", "valid": true, "id": "4RJfi1G5", "sourceID": "", "textAttribute": "", "order": 367}, {"x": 1494.3752820214058, "y": 2732.250719675002, "width": 133.61815405112674, "height": 11.202174336925395, "attribute": "plain text", "valid": true, "id": "SG8Op6sc", "sourceID": "", "textAttribute": "", "order": 368}, {"x": 1471.0555929672498, "y": 2744.825288392357, "width": 467.70576824164255, "height": 23.927760481111797, "attribute": "plain text", "valid": true, "id": "dSEdEmdX", "sourceID": "", "textAttribute": "", "order": 369}, {"x": 1493.2297296010613, "y": 2769.939869034831, "width": 98.78225750052252, "height": 11.242481991747448, "attribute": "plain text", "valid": true, "id": "abSuag1C", "sourceID": "", "textAttribute": "", "order": 370}, {"x": 1471.0423801790266, "y": 2781.382935892499, "width": 468.0783555451953, "height": 24.243226925673422, "attribute": "plain text", "valid": true, "id": "61SV3Q5f", "sourceID": "", "textAttribute": "", "order": 371}, {"x": 1471.2968498768325, "y": 2806.916937351167, "width": 468.1535819760779, "height": 61.597846706836826, "attribute": "plain text", "valid": true, "id": "wAaSFFAF", "sourceID": "", "textAttribute": "", "order": 372}, {"x": 151.5736836316841, "y": 273.53106534424154, "width": 193.19988995425055, "height": 11.390182070184471, "attribute": "title", "valid": true, "id": "eoACfzvu", "sourceID": "", "textAttribute": "", "order": 373}, {"x": 152.64077353113626, "y": 285.39877944955515, "width": 192.13280005479848, "height": 11.919162174682013, "attribute": "title", "valid": true, "id": "ZNrlGuCB", "sourceID": "", "textAttribute": "", "order": 374}, {"x": 216.01732307071615, "y": 298.05146650316755, "width": 65.59446547509202, "height": 12.095621067233168, "attribute": "title", "valid": true, "id": "awGfSyl9", "sourceID": "", "textAttribute": "", "order": 375}, {"x": 155.79766585969392, "y": 2013.5119744760682, "width": 186.55539900212602, "height": 11.828185459756787, "attribute": "title", "valid": true, "id": "V3MpRxTd", "sourceID": "", "textAttribute": "", "order": 376}, {"x": 155.496004805722, "y": 2026.04732332972, "width": 187.03385090457158, "height": 10.994688266344411, "attribute": "title", "valid": true, "id": "1Fm7F029", "sourceID": "", "textAttribute": "", "order": 377}, {"x": 224.6409510850695, "y": 2038.3357839796695, "width": 49.36240623399436, "height": 11.65803780128909, "attribute": "title", "valid": true, "id": "rzemrgSI", "sourceID": "", "textAttribute": "", "order": 378}]}}, "img": "../../test/data/img_label/overlap_0.jpg"}
+{"id": "1", "content": {"width": 1958, "height": 2890, "valid": true, "rotate": 0, "step_1": {"toolName": "rectTool", "dataSourceStep": 0, "result": [{"x": 4.5624013643751296, "y": 39.22604478290589, "width": 144.55183133394445, "height": 39.737356024072376, "attribute": "abandon", "valid": true, "id": "R51fjReX", "sourceID": "", "textAttribute": "", "order": 1}, {"x": 581.5800925017664, "y": 8.253957074408664, "width": 552.6216430180866, "height": 85.35716460629682, "attribute": "abandon", "valid": true, "id": "g0pCsAVV", "sourceID": "", "textAttribute": "", "order": 2}, {"x": 1600.1097352282022, "y": 17.750482254510686, "width": 350.2713458755427, "height": 55.41606367583213, "attribute": "abandon", "valid": true, "id": "0wmvkhHq", "sourceID": "", "textAttribute": "", "order": 3}, {"x": 549.900414350348, "y": 159.4297767504302, "width": 843.7743073096701, "height": 47.513625986801316, "attribute": "title", "valid": true, "id": "nKQPs51V", "sourceID": "", "textAttribute": "", "order": 4}, {"x": 615.3397473219702, "y": 228.8602924658618, "width": 771.7645499674693, "height": 52.09436480153936, "attribute": "title", "valid": true, "id": "XdCfacPL", "sourceID": "", "textAttribute": "", "order": 5}, {"x": 222.54647483588877, "y": 220.58081089239607, "width": 53.5196845247173, "height": 10.074293557593844, "attribute": "title", "valid": true, "id": "LuXrDtSt", "sourceID": "", "textAttribute": "", "order": 6}, {"x": 220.72779457481965, "y": 396.82765823154284, "width": 54.49589046711347, "height": 9.773719485949698, "attribute": "title", "valid": true, "id": "Kn8Wuzvz", "sourceID": "", "textAttribute": "", "order": 7}, {"x": 178.77708896072977, "y": 906.6024263276328, "width": 140.1362964072416, "height": 9.468668676164974, "attribute": "title", "valid": true, "id": "D1feor4l", "sourceID": "", "textAttribute": "", "order": 8}, {"x": 217.2747098233449, "y": 1561.7767904323262, "width": 63.57148544810284, "height": 10.643189871401832, "attribute": "title", "valid": true, "id": "mVk2tVUP", "sourceID": "", "textAttribute": "", "order": 9}, {"x": 216.99418788071506, "y": 2637.08546235445, "width": 63.14615645873423, "height": 9.161100418883724, "attribute": "title", "valid": true, "id": "iF7QgchU", "sourceID": "", "textAttribute": "", "order": 10}, {"x": 158.11424298416387, "y": 2801.385256140501, "width": 179.2695092208934, "height": 8.490946179083018, "attribute": "title", "valid": true, "id": "hrWuu5R3", "sourceID": "", "textAttribute": "", "order": 11}, {"x": 1184.596259035328, "y": 2290.3780657152233, "width": 73.04928484532206, "height": 9.07436031363723, "attribute": "title", "valid": true, "id": "3pDFnfPY", "sourceID": "", "textAttribute": "", "order": 12}, {"x": 1670.708550152182, "y": 2122.039037034724, "width": 76.09996648633107, "height": 9.224238361979523, "attribute": "title", "valid": true, "id": "lo4flX9F", "sourceID": "", "textAttribute": "", "order": 13}, {"x": 1657.6270992321079, "y": 1842.5329360100516, "width": 100.9955963360546, "height": 8.81539216875797, "attribute": "title", "valid": true, "id": "Zh3DOplX", "sourceID": "", "textAttribute": "", "order": 15}, {"x": 41.53828432674127, "y": 420.52790957426396, "width": 414.6534606008096, "height": 127.68368584038106, "attribute": "table", "valid": true, "id": "wL8ok1CF", "sourceID": "", "textAttribute": "", "order": 16}, {"x": 41.3454996857836, "y": 562.0275834215885, "width": 414.73586359342477, "height": 168.73720120539144, "attribute": "table", "valid": true, "id": "g6dNHXCf", "sourceID": "", "textAttribute": "", "order": 17}, {"x": 41.133599538474634, "y": 744.169981249368, "width": 414.73956449537604, "height": 99.56793594545196, "attribute": "table", "valid": true, "id": "vOD4JK6Z", "sourceID": "", "textAttribute": "", "order": 18}, {"x": 41.56656097004386, "y": 857.205642059376, "width": 414.44445550989025, "height": 47.67568135655363, "attribute": "table", "valid": true, "id": "Jm0FPc7D", "sourceID": "", "textAttribute": "", "order": 19}, {"x": 41.15868190654784, "y": 941.2277419353777, "width": 415.03401882278695, "height": 138.20570014652915, "attribute": "table", "valid": true, "id": "WOxNmDvV", "sourceID": "", "textAttribute": "", "order": 20}, {"x": 41.283696214751, "y": 1163.032106965939, "width": 414.9450409952041, "height": 127.91832052194627, "attribute": "table", "valid": true, "id": "IZuz3ATi", "sourceID": "", "textAttribute": "", "order": 21}, {"x": 40.92325710688215, "y": 1668.1922249661607, "width": 414.78426857721695, "height": 438.73411321169095, "attribute": "table", "valid": true, "id": "DRoLdSuC", "sourceID": "", "textAttribute": "", "order": 22}, {"x": 527.9832296133203, "y": 1516.9676967533615, "width": 414.55051238736485, "height": 203.0407951699122, "attribute": "table", "valid": true, "id": "FiAEDHQq", "sourceID": "", "textAttribute": "", "order": 23}, {"x": 527.9264615753708, "y": 998.1877049622647, "width": 414.9480228468876, "height": 444.87906981148, "attribute": "table", "valid": true, "id": "2h0D6Wn1", "sourceID": "", "textAttribute": "", "order": 24}, {"x": 500.34642454193374, "y": 283.5706701706826, "width": 415.56474604525175, "height": 629.9040400600345, "attribute": "table", "valid": true, "id": "AxMgPKds", "sourceID": "", "textAttribute": "", "order": 25}, {"x": 987.2903790243356, "y": 955.1028227156598, "width": 414.00760562041097, "height": 85.77637379360806, "attribute": "table", "valid": true, "id": "nq2IpcsV", "sourceID": "", "textAttribute": "", "order": 26}, {"x": 1014.413307907822, "y": 1094.1246984230813, "width": 414.39040774375013, "height": 52.615521869051136, "attribute": "table", "valid": true, "id": "sDMHNcL4", "sourceID": "", "textAttribute": "", "order": 27}, {"x": 1014.6169519971893, "y": 1220.281225719894, "width": 414.0432569253304, "height": 52.01662979993542, "attribute": "table", "valid": true, "id": "tfTXzs9s", "sourceID": "", "textAttribute": "", "order": 28}, {"x": 1014.6355163212526, "y": 1294.4051431529024, "width": 413.84826201504404, "height": 61.07422188396809, "attribute": "table", "valid": true, "id": "SVqctzb0", "sourceID": "", "textAttribute": "", "order": 29}, {"x": 1014.4198284152984, "y": 1387.349066898805, "width": 414.0943882023947, "height": 51.95410836700179, "attribute": "table", "valid": true, "id": "SyOSHNbu", "sourceID": "", "textAttribute": "", "order": 30}, {"x": 1014.2946853395023, "y": 1492.6715672330483, "width": 414.5683385083947, "height": 37.72014665965916, "attribute": "table", "valid": true, "id": "3ROzd6Rt", "sourceID": "", "textAttribute": "", "order": 31}, {"x": 1014.3879372932658, "y": 1678.4173546797178, "width": 413.93978837339955, "height": 51.98745324172709, "attribute": "table", "valid": true, "id": "s6NERErn", "sourceID": "", "textAttribute": "", "order": 32}, {"x": 1014.1812153944791, "y": 1846.0768335800963, "width": 414.6974447067315, "height": 339.2330509657255, "attribute": "table", "valid": true, "id": "Xvs3SkBI", "sourceID": "", "textAttribute": "", "order": 33}, {"x": 1014.0078357973729, "y": 2321.323688729763, "width": 414.35918367245574, "height": 195.50265987225217, "attribute": "table", "valid": true, "id": "Lsbs5SMj", "sourceID": "", "textAttribute": "", "order": 34}, {"x": 1014.1666213673311, "y": 2537.729449813757, "width": 414.5894380657683, "height": 307.65350663937147, "attribute": "table", "valid": true, "id": "avOp92rp", "sourceID": "", "textAttribute": "", "order": 35}, {"x": 1500.7958703561112, "y": 2770.460061174722, "width": 415.0560317774928, "height": 71.51271556361509, "attribute": "table", "valid": true, "id": "7eWoHDZH", "sourceID": "", "textAttribute": "", "order": 36}, {"x": 1501.4920708052696, "y": 2372.358743504809, "width": 414.25236619069574, "height": 61.13427978027679, "attribute": "table", "valid": true, "id": "od61rPml", "sourceID": "", "textAttribute": "", "order": 37}, {"x": 1501.5283471954574, "y": 2018.1883503037664, "width": 414.29575940721463, "height": 70.88133534023274, "attribute": "table", "valid": true, "id": "AMLP2Xv0", "sourceID": "", "textAttribute": "", "order": 38}, {"x": 1501.5264015179976, "y": 1874.5681347735467, "width": 414.1737026690164, "height": 66.32187610674394, "attribute": "table", "valid": true, "id": "hbdYwCmJ", "sourceID": "", "textAttribute": "", "order": 39}, {"x": 1501.0542093297765, "y": 1802.9101290993817, "width": 414.4477528188625, "height": 38.7052266895812, "attribute": "table", "valid": true, "id": "sR7d1LZv", "sourceID": "", "textAttribute": "", "order": 40}, {"x": 1501.3084839173512, "y": 1616.353447711913, "width": 414.45180057554126, "height": 142.29604140920407, "attribute": "table", "valid": true, "id": "03Qb1XZI", "sourceID": "", "textAttribute": "", "order": 41}, {"x": 1501.3357174287507, "y": 1065.2154624123368, "width": 414.2631292693342, "height": 94.16984563956153, "attribute": "table", "valid": true, "id": "xLBOEnLv", "sourceID": "", "textAttribute": "", "order": 42}, {"x": 1501.2877021861777, "y": 885.5592294322599, "width": 414.5783572635098, "height": 157.08586085959843, "attribute": "table", "valid": true, "id": "I0fJVDWg", "sourceID": "", "textAttribute": "", "order": 43}, {"x": 1501.2845235812244, "y": 833.8900712831199, "width": 414.44452592111116, "height": 29.390534357750884, "attribute": "table", "valid": true, "id": "cjVFV8O9", "sourceID": "", "textAttribute": "", "order": 44}, {"x": 1501.4704047450111, "y": 702.3390695362289, "width": 414.10633983945706, "height": 109.04259012543238, "attribute": "table", "valid": true, "id": "3J16fEuv", "sourceID": "", "textAttribute": "", "order": 45}, {"x": 1473.6236316060529, "y": 372.5934984811994, "width": 414.8632470818045, "height": 307.84035727088536, "attribute": "table", "valid": true, "id": "Rkrp4rID", "sourceID": "", "textAttribute": "", "order": 46}, {"x": 1473.6792782932546, "y": 161.96663844078822, "width": 415.4994677586173, "height": 165.84632463947509, "attribute": "table", "valid": true, "id": "nan4famE", "sourceID": "", "textAttribute": "", "order": 47}, {"x": 32.78341701026026, "y": 408.35166407521706, "width": 82.2311277240652, "height": 10.213971654147047, "attribute": "plain text", "valid": true, "id": "3lxYe4F5", "sourceID": "", "textAttribute": "", "order": 48}, {"x": 33.522709637482045, "y": 550.261657606591, "width": 74.71633073203425, "height": 9.685450280078514, "attribute": "plain text", "valid": true, "id": "3vJFh2hB", "sourceID": "", "textAttribute": "", "order": 49}, {"x": 33.16936021732065, "y": 731.8032809768027, "width": 122.70972722593923, "height": 9.803256445047486, "attribute": "plain text", "valid": true, "id": "xzVnSXog", "sourceID": "", "textAttribute": "", "order": 50}, {"x": 33.1178836463596, "y": 845.3732626983358, "width": 75.5950171361482, "height": 10.22902872139299, "attribute": "plain text", "valid": true, "id": "VOktQQYC", "sourceID": "", "textAttribute": "", "order": 51}, {"x": 32.758146794007885, "y": 1151.4263787492123, "width": 274.21986878421245, "height": 8.812730540742772, "attribute": "plain text", "valid": true, "id": "ObY4cUh4", "sourceID": "", "textAttribute": "", "order": 53}, {"x": 33.19725329007969, "y": 1656.2025633407902, "width": 238.94315196351937, "height": 8.925666073164257, "attribute": "plain text", "valid": true, "id": "wCcucSto", "sourceID": "", "textAttribute": "", "order": 54}, {"x": 1006.7281467800836, "y": 945.5218632809084, "width": 202.482248622193, "height": 8.638480544243691, "attribute": "plain text", "valid": true, "id": "iJ4CCgVR", "sourceID": "", "textAttribute": "", "order": 57}, {"x": 216.05978714698847, "y": 161.97767774973545, "width": 63.77713319900502, "height": 9.065311575109408, "attribute": "title", "valid": true, "id": "ragPfZIb", "sourceID": "", "textAttribute": "", "order": 78}, {"x": 32.75154026279063, "y": 173.52754600251393, "width": 158.74378009362246, "height": 9.279038682272647, "attribute": "plain text", "valid": true, "id": "UkFNqVSP", "sourceID": "", "textAttribute": "", "order": 79}, {"x": 32.93512557471076, "y": 184.42650456239994, "width": 187.72401816713491, "height": 9.780751110157947, "attribute": "plain text", "valid": true, "id": "SIHHG9c3", "sourceID": "", "textAttribute": "", "order": 80}, {"x": 32.63405280664931, "y": 196.43685641346573, "width": 168.04381132693135, "height": 9.799324801452492, "attribute": "plain text", "valid": true, "id": "6qfldrhb", "sourceID": "", "textAttribute": "", "order": 81}, {"x": 32.55348102512564, "y": 231.91311648027434, "width": 56.6845934830749, "height": 9.534505355448081, "attribute": "plain text", "valid": true, "id": "TkJpbw4q", "sourceID": "", "textAttribute": "", "order": 82}, {"x": 13.556423783131748, "y": 243.67775592344228, "width": 469.79724810670484, "height": 34.1279507382586, "attribute": "plain text", "valid": true, "id": "ZrIvrJVQ", "sourceID": "", "textAttribute": "", "order": 83}, {"x": 13.768398996890637, "y": 278.6148192246048, "width": 469.6668615880213, "height": 33.61987468027796, "attribute": "plain text", "valid": true, "id": "MZtkZIzq", "sourceID": "", "textAttribute": "", "order": 84}, {"x": 33.34917548388512, "y": 314.59967233628487, "width": 378.65112352628194, "height": 9.896825001362135, "attribute": "plain text", "valid": true, "id": "DGllYBGL", "sourceID": "", "textAttribute": "", "order": 85}, {"x": 13.686781282276403, "y": 326.5732654614708, "width": 468.80632846177326, "height": 20.814366438122455, "attribute": "plain text", "valid": true, "id": "cnqFlPsE", "sourceID": "", "textAttribute": "", "order": 86}, {"x": 33.00797707968993, "y": 350.0810069328327, "width": 368.5981144081637, "height": 8.973763588425085, "attribute": "plain text", "valid": true, "id": "o5T4tG8k", "sourceID": "", "textAttribute": "", "order": 87}, {"x": 33.07507426101192, "y": 361.922811673838, "width": 119.42646365439411, "height": 9.228846061557496, "attribute": "plain text", "valid": true, "id": "JBqtAqth", "sourceID": "", "textAttribute": "", "order": 88}, {"x": 33.815493684335785, "y": 372.9828455083398, "width": 180.0620057664404, "height": 9.510598174792362, "attribute": "plain text", "valid": true, "id": "tRz8Idws", "sourceID": "", "textAttribute": "", "order": 89}, {"x": 33.33188106150191, "y": 1138.9149321106315, "width": 75.09604012534841, "height": 9.509521540253244, "attribute": "plain text", "valid": true, "id": "R152g3eI", "sourceID": "", "textAttribute": "", "order": 90}, {"x": 12.586759117751004, "y": 1081.0191168423707, "width": 462.9199059468079, "height": 21.605138460572345, "attribute": "table_footnote", "valid": true, "id": "1w0kL96q", "sourceID": "", "textAttribute": "", "order": 91}, {"x": 13.918285976306253, "y": 1103.3161187785201, "width": 466.37508804669153, "height": 22.373005047264893, "attribute": "table_footnote", "valid": true, "id": "mAoT9TCn", "sourceID": "", "textAttribute": "", "order": 92}, {"x": 32.89413304044313, "y": 1127.2561481197995, "width": 405.0083159206332, "height": 10.690569354038013, "attribute": "table_footnote", "valid": true, "id": "yICplYDa", "sourceID": "", "textAttribute": "", "order": 93}, {"x": 32.96549128428112, "y": 1291.4466396520645, "width": 357.9635545250958, "height": 10.897014118221264, "attribute": "table_footnote", "valid": true, "id": "APoS6ya0", "sourceID": "", "textAttribute": "", "order": 94}, {"x": 32.844771054618846, "y": 1303.6828610822856, "width": 441.76054502082405, "height": 10.076277109747197, "attribute": "table_footnote", "valid": true, "id": "g416TkHR", "sourceID": "", "textAttribute": "", "order": 95}, {"x": 32.46070652839483, "y": 1315.2904270992333, "width": 414.4408895012607, "height": 9.738259518144915, "attribute": "plain text", "valid": true, "id": "JLifKiXG", "sourceID": "", "textAttribute": "", "order": 96}, {"x": 122.83770095715512, "y": 1328.1857189059547, "width": 250.0763242803439, "height": 20.836781587466728, "attribute": "figure_caption", "valid": true, "id": "QZEP09rQ", "sourceID": "", "textAttribute": "", "order": 97}, {"x": 70.42551487825824, "y": 1366.796645180168, "width": 357.5661688780338, "height": 146.48129011578294, "attribute": "figure", "valid": true, "id": "8b6yqiGG", "sourceID": "", "textAttribute": "", "order": 98}, {"x": 33.22151668013205, "y": 1514.2942973666045, "width": 308.85004253659906, "height": 11.001456523796426, "attribute": "table_footnote", "valid": true, "id": "R4lOcYkA", "sourceID": "", "textAttribute": "", "order": 99}, {"x": 33.40149091426053, "y": 1526.5195660287998, "width": 332.3661795336541, "height": 9.556348381354907, "attribute": "table_footnote", "valid": true, "id": "n74GqZ2r", "sourceID": "", "textAttribute": "", "order": 100}, {"x": 32.834517441733354, "y": 1537.8546269854148, "width": 370.32898627365364, "height": 10.1306538239538, "attribute": "table_footnote", "valid": true, "id": "GoZvHX1P", "sourceID": "", "textAttribute": "", "order": 101}, {"x": 32.38779694963031, "y": 1549.3078521008758, "width": 443.41817555153324, "height": 10.353226826490284, "attribute": "table_footnote", "valid": true, "id": "jzfddrhp", "sourceID": "", "textAttribute": "", "order": 102}, {"x": 33.21771063574949, "y": 1573.5153531650208, "width": 133.61701845390454, "height": 9.39344893004494, "attribute": "plain text", "valid": true, "id": "d59ZYXT7", "sourceID": "", "textAttribute": "", "order": 103}, {"x": 32.4508984781948, "y": 1585.7585989404847, "width": 159.61945393240867, "height": 9.419197675455829, "attribute": "plain text", "valid": true, "id": "BoD9fdwB", "sourceID": "", "textAttribute": "", "order": 104}, {"x": 13.753529067764429, "y": 1596.291321479212, "width": 469.96286530139963, "height": 57.8442643184473, "attribute": "plain text", "valid": true, "id": "M3juiiET", "sourceID": "", "textAttribute": "", "order": 105}, {"x": 32.0266223125339, "y": 2107.4360023128547, "width": 229.85502534314855, "height": 10.4934879908165, "attribute": "plain text", "valid": true, "id": "ZzWnUeWE", "sourceID": "", "textAttribute": "", "order": 106}, {"x": 14.349171687662729, "y": 2119.858853873131, "width": 468.65320412973523, "height": 44.693999886925475, "attribute": "plain text", "valid": true, "id": "msxzclV7", "sourceID": "", "textAttribute": "", "order": 107}, {"x": 33.43301915255734, "y": 2166.436367300168, "width": 199.88546951817833, "height": 10.004885006875314, "attribute": "plain text", "valid": true, "id": "JJGeXr56", "sourceID": "", "textAttribute": "", "order": 108}, {"x": 33.220760496628564, "y": 2178.8745269617293, "width": 130.33949124766718, "height": 9.226837957021285, "attribute": "plain text", "valid": true, "id": "S98TXWOa", "sourceID": "", "textAttribute": "", "order": 109}, {"x": 13.287344636432282, "y": 2190.761186576855, "width": 471.23448468248273, "height": 32.5616341203958, "attribute": "plain text", "valid": true, "id": "5oCkCBmG", "sourceID": "", "textAttribute": "", "order": 110}, {"x": 14.196422326096085, "y": 2225.183135547339, "width": 469.415821938589, "height": 45.69545236608643, "attribute": "plain text", "valid": true, "id": "01YFvZYa", "sourceID": "", "textAttribute": "", "order": 111}, {"x": 14.438194139695975, "y": 2271.6577126194356, "width": 469.4207342740601, "height": 23.018361772403306, "attribute": "plain text", "valid": true, "id": "WDQWfAZ2", "sourceID": "", "textAttribute": "", "order": 112}, {"x": 32.61220354630956, "y": 2295.894375355701, "width": 129.47827803853085, "height": 9.09479177884519, "attribute": "plain text", "valid": true, "id": "Aya3LfLO", "sourceID": "", "textAttribute": "", "order": 113}, {"x": 33.13587466393173, "y": 2307.8753815455834, "width": 349.73977087629646, "height": 9.478249944626162, "attribute": "plain text", "valid": true, "id": "qbXJwaVf", "sourceID": "", "textAttribute": "", "order": 114}, {"x": 32.38379847974653, "y": 2319.5777642370153, "width": 240.26738058463013, "height": 9.786872638468104, "attribute": "plain text", "valid": true, "id": "VnWenFfc", "sourceID": "", "textAttribute": "", "order": 115}, {"x": 32.86152107498654, "y": 2332.257575224379, "width": 164.05526530169809, "height": 8.99670216231979, "attribute": "plain text", "valid": true, "id": "wEDOyvDh", "sourceID": "", "textAttribute": "", "order": 116}, {"x": 14.195686047148495, "y": 2342.97708498327, "width": 469.4173019090756, "height": 45.651589558544494, "attribute": "plain text", "valid": true, "id": "rBfI5COK", "sourceID": "", "textAttribute": "", "order": 117}, {"x": 14.219070174950446, "y": 2389.3261568198063, "width": 469.76632730026375, "height": 22.04575849411095, "attribute": "plain text", "valid": true, "id": "xrlmVs2I", "sourceID": "", "textAttribute": "", "order": 118}, {"x": 32.332875236547096, "y": 2414.0323993607717, "width": 132.2196665088889, "height": 8.685009084779864, "attribute": "plain text", "valid": true, "id": "WNQH3J4P", "sourceID": "", "textAttribute": "", "order": 119}, {"x": 33.1018032762103, "y": 2424.8888986073416, "width": 349.6915367242085, "height": 10.666387740161014, "attribute": "plain text", "valid": true, "id": "W4D8imcK", "sourceID": "", "textAttribute": "", "order": 120}, {"x": 33.00890370539937, "y": 2436.3708404386844, "width": 234.45552339086828, "height": 10.328437153782744, "attribute": "plain text", "valid": true, "id": "M2lezkvE", "sourceID": "", "textAttribute": "", "order": 121}, {"x": 12.352029397833883, "y": 2448.7649650232233, "width": 472.52599978556054, "height": 57.83924806118337, "attribute": "plain text", "valid": true, "id": "JMNVc479", "sourceID": "", "textAttribute": "", "order": 122}, {"x": 32.49248184771023, "y": 2507.120634942096, "width": 209.6672742217897, "height": 10.328437153782744, "attribute": "plain text", "valid": true, "id": "ewhVzBNg", "sourceID": "", "textAttribute": "", "order": 123}, {"x": 14.41771682859043, "y": 2519.5147595266353, "width": 469.94389049711486, "height": 80.56180979950541, "attribute": "plain text", "valid": true, "id": "wnLZsUH0", "sourceID": "", "textAttribute": "", "order": 124}, {"x": 31.45963813233196, "y": 2601.6258348992083, "width": 202.4373682141418, "height": 9.812015296093607, "attribute": "plain text", "valid": true, "id": "t9ITnFaW", "sourceID": "", "textAttribute": "", "order": 125}, {"x": 13.901294970901294, "y": 2612.47069391068, "width": 469.42746863942574, "height": 22.72256173832204, "attribute": "plain text", "valid": true, "id": "q7we1L5j", "sourceID": "", "textAttribute": "", "order": 126}, {"x": 32.49248184771023, "y": 2649.1366458066086, "width": 190.55966548729162, "height": 9.29559343840447, "attribute": "plain text", "valid": true, "id": "Hf6Zc5Vr", "sourceID": "", "textAttribute": "", "order": 127}, {"x": 13.901294970901294, "y": 2659.4650829603916, "width": 470.460312354804, "height": 34.600264465172195, "attribute": "plain text", "valid": true, "id": "Ut9FHGoe", "sourceID": "", "textAttribute": "", "order": 128}, {"x": 33.00890370539937, "y": 2695.614612998631, "width": 343.42053536327626, "height": 9.29559343840447, "attribute": "plain text", "valid": true, "id": "xGIQ4Asm", "sourceID": "", "textAttribute": "", "order": 129}, {"x": 14.41771682859043, "y": 2706.975893867792, "width": 470.460312354804, "height": 45.44512347664408, "attribute": "plain text", "valid": true, "id": "CyijVsvJ", "sourceID": "", "textAttribute": "", "order": 130}, {"x": 33.00890370539937, "y": 2753.9702829175035, "width": 310.36953647117144, "height": 9.812015296093607, "attribute": "plain text", "valid": true, "id": "21Lzglhn", "sourceID": "", "textAttribute": "", "order": 131}, {"x": 12.86845125552302, "y": 2765.3315637866644, "width": 470.9767342124931, "height": 33.56742074979392, "attribute": "plain text", "valid": true, "id": "vl0ITU05", "sourceID": "", "textAttribute": "", "order": 132}, {"x": 500.26213646015316, "y": 913.9958394673173, "width": 467.22639387504216, "height": 20.668577869037236, "attribute": "table_footnote", "valid": true, "id": "GFyIY5Bb", "sourceID": "", "textAttribute": "", "order": 134}, {"x": 500.67418120420905, "y": 935.1159309710775, "width": 466.0385357569195, "height": 20.48285152701898, "attribute": "table_footnote", "valid": true, "id": "993fnRLh", "sourceID": "", "textAttribute": "", "order": 135}, {"x": 501.75242445017824, "y": 1443.9015456912805, "width": 462.2052597507561, "height": 30.670190335292055, "attribute": "table_footnote", "valid": true, "id": "WswE8lJM", "sourceID": "", "textAttribute": "", "order": 136}, {"x": 500.44490600093303, "y": 1720.5111958144996, "width": 465.05216382907435, "height": 20.369297072536142, "attribute": "table_footnote", "valid": true, "id": "JPTVFfg7", "sourceID": "", "textAttribute": "", "order": 137}, {"x": 519.4254718207629, "y": 1741.0837234126182, "width": 148.7963570349793, "height": 9.47887904074683, "attribute": "table_footnote", "valid": true, "id": "7NOxtdtD", "sourceID": "", "textAttribute": "", "order": 138}, {"x": 519.4254718207629, "y": 1751.4860352126273, "width": 196.1975661854647, "height": 9.437202471321767, "attribute": "table_footnote", "valid": true, "id": "H9u8cRNa", "sourceID": "", "textAttribute": "", "order": 139}, {"x": 519.4405029188172, "y": 1761.456316850866, "width": 331.4585241276916, "height": 9.97151590682104, "attribute": "table_footnote", "valid": true, "id": "KHfDYego", "sourceID": "", "textAttribute": "", "order": 140}, {"x": 518.7771895714956, "y": 1773.1274835964427, "width": 56.31632810418994, "height": 9.115952390965997, "attribute": "plain text", "valid": true, "id": "ym9cUHan", "sourceID": "", "textAttribute": "", "order": 141}, {"x": 518.9797662912948, "y": 1783.8640497458027, "width": 82.65130167809171, "height": 9.115952390965997, "attribute": "plain text", "valid": true, "id": "PyrebNPS", "sourceID": "", "textAttribute": "", "order": 142}, {"x": 500.5714681786554, "y": 1794.347509731098, "width": 469.4124050559213, "height": 71.92299141364985, "attribute": "plain text", "valid": true, "id": "652KX1gI", "sourceID": "", "textAttribute": "", "order": 143}, {"x": 500.5166185611567, "y": 1867.3762124446778, "width": 469.8141548354301, "height": 61.95467365467568, "attribute": "plain text", "valid": true, "id": "gMtdVhTj", "sourceID": "", "textAttribute": "", "order": 144}, {"x": 519.2856532621714, "y": 1931.2406349957441, "width": 446.7887084605388, "height": 8.937413676420736, "attribute": "plain text", "valid": true, "id": "utZ2bSvR", "sourceID": "", "textAttribute": "", "order": 145}, {"x": 519.9425531612916, "y": 1941.7463591981361, "width": 289.0788071551337, "height": 8.156822967736352, "attribute": "plain text", "valid": true, "id": "brYImEpE", "sourceID": "", "textAttribute": "", "order": 146}, {"x": 500.8882634367853, "y": 1950.8706382635287, "width": 469.319880899335, "height": 20.33059270032717, "attribute": "plain text", "valid": true, "id": "LQ7Ry7bQ", "sourceID": "", "textAttribute": "", "order": 147}, {"x": 519.0810586758571, "y": 1971.742363324183, "width": 110.5522531622894, "height": 8.896566047015769, "attribute": "plain text", "valid": true, "id": "43895GMu", "sourceID": "", "textAttribute": "", "order": 148}, {"x": 500.4971920926697, "y": 1982.3218506290152, "width": 469.2765489769156, "height": 30.570179595539855, "attribute": "plain text", "valid": true, "id": "VKTujCys", "sourceID": "", "textAttribute": "", "order": 149}, {"x": 519.3963738132006, "y": 2014.4385797894936, "width": 196.5923718362618, "height": 8.459053363399498, "attribute": "plain text", "valid": true, "id": "iCzSuSdu", "sourceID": "", "textAttribute": "", "order": 150}, {"x": 500.56181010685634, "y": 2025.216635996661, "width": 469.4585010115584, "height": 18.8915023872656, "attribute": "plain text", "valid": true, "id": "vi6l6Ahc", "sourceID": "", "textAttribute": "", "order": 151}, {"x": 519.8232599862764, "y": 2044.937018197036, "width": 129.76888539781206, "height": 9.809107800204732, "attribute": "plain text", "valid": true, "id": "Mc8VAWwm", "sourceID": "", "textAttribute": "", "order": 152}, {"x": 519.6579378208725, "y": 2055.831481480881, "width": 278.67076542277437, "height": 9.767331425741187, "attribute": "plain text", "valid": true, "id": "NmU2BA4C", "sourceID": "", "textAttribute": "", "order": 153}, {"x": 519.1526828392846, "y": 2066.753023444399, "width": 70.31659217277046, "height": 9.192491676236545, "attribute": "plain text", "valid": true, "id": "IeXnDbK5", "sourceID": "", "textAttribute": "", "order": 154}, {"x": 499.85024549329165, "y": 2077.096816438411, "width": 470.4585845818496, "height": 20.37758934035688, "attribute": "plain text", "valid": true, "id": "1qoNSGmB", "sourceID": "", "textAttribute": "", "order": 155}, {"x": 519.149365379217, "y": 2097.9779446831085, "width": 74.40569387170001, "height": 8.922310185899788, "attribute": "plain text", "valid": true, "id": "e82tsjUe", "sourceID": "", "textAttribute": "", "order": 156}, {"x": 519.1493653792169, "y": 2108.1748706098515, "width": 311.8026405688017, "height": 10.29655167833957, "attribute": "plain text", "valid": true, "id": "wb5h360G", "sourceID": "", "textAttribute": "", "order": 157}, {"x": 518.9155848683603, "y": 2119.429110450839, "width": 142.1357058281369, "height": 8.8628536768405, "attribute": "plain text", "valid": true, "id": "SxIsbqLu", "sourceID": "", "textAttribute": "", "order": 158}, {"x": 502.258207374598, "y": 2129.9649121179364, "width": 467.66217803388804, "height": 19.394846901547517, "attribute": "plain text", "valid": true, "id": "1QTzgZXI", "sourceID": "", "textAttribute": "", "order": 159}, {"x": 499.97530373249384, "y": 2150.8989464074634, "width": 470.4226435228945, "height": 19.69411266741373, "attribute": "plain text", "valid": true, "id": "UTw0P3ou", "sourceID": "", "textAttribute": "", "order": 160}, {"x": 519.340864299614, "y": 2171.5509972796203, "width": 409.5132741901634, "height": 9.088375260036944, "attribute": "plain text", "valid": true, "id": "53PQR17q", "sourceID": "", "textAttribute": "", "order": 161}, {"x": 519.3564370315389, "y": 2181.441090000005, "width": 331.31572616696633, "height": 9.883552920998094, "attribute": "plain text", "valid": true, "id": "gZHqb0Qe", "sourceID": "", "textAttribute": "", "order": 162}, {"x": 519.2054345777577, "y": 2192.6785294163406, "width": 48.53283511574945, "height": 9.309367349568308, "attribute": "plain text", "valid": true, "id": "MnukvSD5", "sourceID": "", "textAttribute": "", "order": 163}, {"x": 519.2054345777576, "y": 2202.60852125588, "width": 335.55087649906505, "height": 9.701140046590135, "attribute": "plain text", "valid": true, "id": "KvCQM3fu", "sourceID": "", "textAttribute": "", "order": 164}, {"x": 518.7251023622696, "y": 2213.2783034508266, "width": 68.4649000953615, "height": 9.656697477792669, "attribute": "plain text", "valid": true, "id": "Pz4lydD3", "sourceID": "", "textAttribute": "", "order": 165}, {"x": 518.912377372566, "y": 2223.9096699233896, "width": 369.7098086666432, "height": 9.47347928777662, "attribute": "plain text", "valid": true, "id": "gCrEH1i6", "sourceID": "", "textAttribute": "", "order": 166}, {"x": 519.4311254387861, "y": 2234.8450386625773, "width": 251.68306358341502, "height": 9.122802946803132, "attribute": "plain text", "valid": true, "id": "ZOzPOF5d", "sourceID": "", "textAttribute": "", "order": 167}, {"x": 519.5020989643011, "y": 2244.633721622875, "width": 374.3657300253085, "height": 9.654766384883033, "attribute": "plain text", "valid": true, "id": "raiJFdJX", "sourceID": "", "textAttribute": "", "order": 168}, {"x": 501.03069244017485, "y": 2255.6419378179376, "width": 468.56357519457777, "height": 30.625864408928102, "attribute": "plain text", "valid": true, "id": "uBk5aDDU", "sourceID": "", "textAttribute": "", "order": 169}, {"x": 500.4372202951001, "y": 2286.731154706203, "width": 468.9833394268452, "height": 20.51449655404368, "attribute": "plain text", "valid": true, "id": "p84TUdxx", "sourceID": "", "textAttribute": "", "order": 170}, {"x": 501.1888331193573, "y": 2307.676295531103, "width": 468.4066927762775, "height": 21.006849360237094, "attribute": "plain text", "valid": true, "id": "2M5acTfs", "sourceID": "", "textAttribute": "", "order": 171}, {"x": 519.5974888249458, "y": 2329.024121534573, "width": 354.5061015130484, "height": 9.861534306237164, "attribute": "plain text", "valid": true, "id": "ABZjvSAu", "sourceID": "", "textAttribute": "", "order": 172}, {"x": 519.2153353379796, "y": 2339.7515267105464, "width": 144.79171271532223, "height": 9.581804517925736, "attribute": "plain text", "valid": true, "id": "3lTHZPOC", "sourceID": "", "textAttribute": "", "order": 173}, {"x": 519.2153353379797, "y": 2349.500642369859, "width": 344.9606759456151, "height": 9.840351355113734, "attribute": "plain text", "valid": true, "id": "Jw9KDjVK", "sourceID": "", "textAttribute": "", "order": 174}, {"x": 518.9340804162325, "y": 2360.0544411721376, "width": 355.8063399263199, "height": 10.702149451054373, "attribute": "plain text", "valid": true, "id": "1WHj56rF", "sourceID": "", "textAttribute": "", "order": 175}, {"x": 519.2907837040377, "y": 2371.086639046076, "width": 162.29551287484696, "height": 9.15589717514517, "attribute": "plain text", "valid": true, "id": "C1DCsFOP", "sourceID": "", "textAttribute": "", "order": 176}, {"x": 519.0994427219098, "y": 2381.2738419729594, "width": 201.2764193515928, "height": 9.915383056106672, "attribute": "plain text", "valid": true, "id": "WmBsBZgq", "sourceID": "", "textAttribute": "", "order": 177}, {"x": 501.02384714161303, "y": 2391.6170662966215, "width": 468.421161446499, "height": 20.937249539724114, "attribute": "plain text", "valid": true, "id": "ifRsPPIT", "sourceID": "", "textAttribute": "", "order": 178}, {"x": 500.85424153062735, "y": 2413.1393993130655, "width": 469.2468848222405, "height": 30.580336834277905, "attribute": "plain text", "valid": true, "id": "1biOykT9", "sourceID": "", "textAttribute": "", "order": 179}, {"x": 519.260038032676, "y": 2444.860257813078, "width": 141.98692024694, "height": 8.956556551182874, "attribute": "plain text", "valid": true, "id": "GzBv5GFF", "sourceID": "", "textAttribute": "", "order": 180}, {"x": 500.42304369665976, "y": 2454.239984217595, "width": 468.54021567604593, "height": 21.18637550597877, "attribute": "plain text", "valid": true, "id": "DN8dyooS", "sourceID": "", "textAttribute": "", "order": 181}, {"x": 519.4963793009041, "y": 2476.1244102234687, "width": 317.1738624888612, "height": 9.334155769572588, "attribute": "plain text", "valid": true, "id": "AX52DVnN", "sourceID": "", "textAttribute": "", "order": 182}, {"x": 519.4193684167653, "y": 2486.67674645631, "width": 288.4159328669796, "height": 9.468649155429164, "attribute": "plain text", "valid": true, "id": "mwhUTFxR", "sourceID": "", "textAttribute": "", "order": 183}, {"x": 519.6462376048694, "y": 2497.030144134967, "width": 64.99400076639392, "height": 8.532731944191381, "attribute": "plain text", "valid": true, "id": "4l4Vv28P", "sourceID": "", "textAttribute": "", "order": 184}, {"x": 500.34000208228696, "y": 2506.7986699986136, "width": 469.8052387488644, "height": 41.152624819683965, "attribute": "plain text", "valid": true, "id": "Q7SV3Dly", "sourceID": "", "textAttribute": "", "order": 185}, {"x": 519.2271117456511, "y": 2548.8269716820414, "width": 74.6449031138968, "height": 9.454288170537739, "attribute": "plain text", "valid": true, "id": "i4LyQFsA", "sourceID": "", "textAttribute": "", "order": 186}, {"x": 500.06962215215634, "y": 2560.0038147398523, "width": 469.7293128082432, "height": 51.570724770537325, "attribute": "plain text", "valid": true, "id": "7ivLWsxP", "sourceID": "", "textAttribute": "", "order": 187}, {"x": 518.281162560286, "y": 2612.580750799788, "width": 132.9887085785982, "height": 8.662206139863995, "attribute": "plain text", "valid": true, "id": "pJVc3NWz", "sourceID": "", "textAttribute": "", "order": 188}, {"x": 500.6090941660446, "y": 2622.716204807539, "width": 469.37192801271766, "height": 30.98128112854969, "attribute": "plain text", "valid": true, "id": "E8s8vUaf", "sourceID": "", "textAttribute": "", "order": 189}, {"x": 519.7177419284226, "y": 2654.063082518313, "width": 421.5949610828458, "height": 9.878529366777089, "attribute": "plain text", "valid": true, "id": "jQTsBq7N", "sourceID": "", "textAttribute": "", "order": 190}, {"x": 500.76832478573743, "y": 2664.8448239089216, "width": 469.0742917957545, "height": 19.41079148610956, "attribute": "plain text", "valid": true, "id": "PHU3sMBG", "sourceID": "", "textAttribute": "", "order": 191}, {"x": 500.96377297613896, "y": 2685.722672009338, "width": 469.12816207093744, "height": 40.40368543452655, "attribute": "plain text", "valid": true, "id": "QHAw6lEf", "sourceID": "", "textAttribute": "", "order": 192}, {"x": 519.4037121141442, "y": 2727.263391275914, "width": 235.64481350584865, "height": 10.182207465478168, "attribute": "plain text", "valid": true, "id": "yzVNgdce", "sourceID": "", "textAttribute": "", "order": 193}, {"x": 501.5872417654575, "y": 2737.9738847193016, "width": 467.2973828249532, "height": 20.201415880139475, "attribute": "plain text", "valid": true, "id": "qUCbx8bA", "sourceID": "", "textAttribute": "", "order": 194}, {"x": 500.72849369751776, "y": 2758.7076710438128, "width": 469.20504668647254, "height": 31.117980033951998, "attribute": "plain text", "valid": true, "id": "LyuqCW7A", "sourceID": "", "textAttribute": "", "order": 195}, {"x": 519.1529243884087, "y": 2791.129183599029, "width": 108.48323055221891, "height": 8.759515510427613, "attribute": "plain text", "valid": true, "id": "IcKPY7w2", "sourceID": "", "textAttribute": "", "order": 196}, {"x": 500.6231800394273, "y": 2800.548126656115, "width": 469.93220032859875, "height": 20.228647901283725, "attribute": "plain text", "valid": true, "id": "nm7Kw6tU", "sourceID": "", "textAttribute": "", "order": 197}, {"x": 499.8144089097789, "y": 2821.5548483636685, "width": 470.27368993380446, "height": 20.330430059481927, "attribute": "plain text", "valid": true, "id": "fJg0Q44E", "sourceID": "", "textAttribute": "", "order": 198}, {"x": 500.2645346195578, "y": 2842.8717083089564, "width": 322.2864932562972, "height": 9.932518188838205, "attribute": "plain text", "valid": true, "id": "AaDXG596", "sourceID": "", "textAttribute": "", "order": 199}, {"x": 520.183472208421, "y": 2853.7613461316264, "width": 225.17223537499558, "height": 10.029591908730271, "attribute": "plain text", "valid": true, "id": "YpF0h5ML", "sourceID": "", "textAttribute": "", "order": 200}, {"x": 987.4101763284151, "y": 283.5648593708104, "width": 468.72085944789103, "height": 19.96012335923674, "attribute": "plain text", "valid": true, "id": "eTAjNqy7", "sourceID": "", "textAttribute": "", "order": 201}, {"x": 987.7274767537281, "y": 304.5166167998071, "width": 468.8324908925366, "height": 20.03543785595664, "attribute": "plain text", "valid": true, "id": "aDVqzocN", "sourceID": "", "textAttribute": "", "order": 202}, {"x": 1006.2648056514798, "y": 325.5750455872496, "width": 119.1632399242555, "height": 9.066768255106398, "attribute": "plain text", "valid": true, "id": "HCmprbUz", "sourceID": "", "textAttribute": "", "order": 203}, {"x": 986.8235505714846, "y": 335.6465972828583, "width": 469.0785786405121, "height": 30.79899066338598, "attribute": "plain text", "valid": true, "id": "EmVIeaXj", "sourceID": "", "textAttribute": "", "order": 204}, {"x": 987.6828098639651, "y": 367.50588516360506, "width": 468.5250176242415, "height": 19.8066934022292, "attribute": "plain text", "valid": true, "id": "t3sI5m29", "sourceID": "", "textAttribute": "", "order": 205}, {"x": 987.3391317445668, "y": 388.0756585120808, "width": 469.2161866825934, "height": 20.450719493619026, "attribute": "plain text", "valid": true, "id": "fDx9JkZ1", "sourceID": "", "textAttribute": "", "order": 206}, {"x": 1006.0511184847646, "y": 409.54796245699237, "width": 139.45502073948774, "height": 9.5581473179536, "attribute": "plain text", "valid": true, "id": "bmyIPpOH", "sourceID": "", "textAttribute": "", "order": 207}, {"x": 987.3868480905575, "y": 420.17894484069456, "width": 468.7519921690924, "height": 30.126978004433376, "attribute": "plain text", "valid": true, "id": "niMLWLz0", "sourceID": "", "textAttribute": "", "order": 208}, {"x": 1005.7022443615488, "y": 451.75610230274685, "width": 166.31948125746615, "height": 9.303131394588014, "attribute": "plain text", "valid": true, "id": "BFFdBNhU", "sourceID": "", "textAttribute": "", "order": 209}, {"x": 987.5966016500365, "y": 461.695106804536, "width": 468.50992289268976, "height": 20.328996194368994, "attribute": "plain text", "valid": true, "id": "zQjfz2Vi", "sourceID": "", "textAttribute": "", "order": 210}, {"x": 987.6036511940353, "y": 482.68726373473453, "width": 469.6345375087161, "height": 30.19813573853389, "attribute": "plain text", "valid": true, "id": "pMsJ3lwh", "sourceID": "", "textAttribute": "", "order": 211}, {"x": 986.8085575465622, "y": 514.2456936867693, "width": 470.2013931340929, "height": 61.890935576934645, "attribute": "plain text", "valid": true, "id": "98vgkiy1", "sourceID": "", "textAttribute": "", "order": 212}, {"x": 986.2101228898588, "y": 577.1414841183544, "width": 471.21908480775335, "height": 31.2044498151332, "attribute": "plain text", "valid": true, "id": "d6xDHvfX", "sourceID": "", "textAttribute": "", "order": 213}, {"x": 986.6240860991825, "y": 609.2279744323156, "width": 470.96447796126915, "height": 30.489768169397927, "attribute": "plain text", "valid": true, "id": "pGwW0bLf", "sourceID": "", "textAttribute": "", "order": 214}, {"x": 1004.7911351191137, "y": 640.4885932428043, "width": 216.64685089066703, "height": 9.35805884544984, "attribute": "plain text", "valid": true, "id": "R6LptwIs", "sourceID": "", "textAttribute": "", "order": 215}, {"x": 1005.2363302216045, "y": 650.7660431538366, "width": 113.76413644850098, "height": 9.803750187845566, "attribute": "plain text", "valid": true, "id": "S3quN7Fx", "sourceID": "", "textAttribute": "", "order": 216}, {"x": 1005.8695693772793, "y": 661.300876175895, "width": 158.3968000272, "height": 9.997095308281695, "attribute": "plain text", "valid": true, "id": "kr8PdNEn", "sourceID": "", "textAttribute": "", "order": 217}, {"x": 1006.202735043441, "y": 671.7595482637759, "width": 112.86900874580238, "height": 9.606750681591498, "attribute": "plain text", "valid": true, "id": "Zy5unNFr", "sourceID": "", "textAttribute": "", "order": 218}, {"x": 1005.9198825846169, "y": 682.5442755325532, "width": 157.91851317112022, "height": 9.88654820051532, "attribute": "plain text", "valid": true, "id": "TJpA2kbs", "sourceID": "", "textAttribute": "", "order": 219}, {"x": 1005.8978814621664, "y": 692.8961943643332, "width": 92.42724240828429, "height": 9.232578550114017, "attribute": "plain text", "valid": true, "id": "pQlIRaim", "sourceID": "", "textAttribute": "", "order": 220}, {"x": 1006.3037090907433, "y": 703.3462558001767, "width": 167.68230673924452, "height": 10.025022736504063, "attribute": "plain text", "valid": true, "id": "3ru9k8v7", "sourceID": "", "textAttribute": "", "order": 221}, {"x": 1005.8900572987363, "y": 714.0708371694838, "width": 43.57261026176505, "height": 8.307618298935749, "attribute": "plain text", "valid": true, "id": "Tkzp01l5", "sourceID": "", "textAttribute": "", "order": 222}, {"x": 985.2503614586678, "y": 725.4956439591016, "width": 471.7950990559386, "height": 72.22677310941171, "attribute": "plain text", "valid": true, "id": "E5Ts4bOr", "sourceID": "", "textAttribute": "", "order": 223}, {"x": 1004.7198324554095, "y": 798.4084660466818, "width": 288.6130015136602, "height": 9.413848369119208, "attribute": "plain text", "valid": true, "id": "kzLAo69v", "sourceID": "", "textAttribute": "", "order": 224}, {"x": 1004.6998611012706, "y": 808.5034783507472, "width": 380.3742357917857, "height": 9.748530096502623, "attribute": "plain text", "valid": true, "id": "PejNhG7y", "sourceID": "", "textAttribute": "", "order": 225}, {"x": 987.7706289758962, "y": 818.7862534605645, "width": 468.8807840659891, "height": 20.43567577665394, "attribute": "plain text", "valid": true, "id": "M4U0h6fW", "sourceID": "", "textAttribute": "", "order": 226}, {"x": 986.8862135196856, "y": 839.594878396317, "width": 469.6959382805446, "height": 51.673998606492084, "attribute": "plain text", "valid": true, "id": "k4VPx1DJ", "sourceID": "", "textAttribute": "", "order": 227}, {"x": 1005.7610646085855, "y": 892.1540484888351, "width": 361.196429829289, "height": 9.427356259081277, "attribute": "plain text", "valid": true, "id": "PkVV3mWr", "sourceID": "", "textAttribute": "", "order": 228}, {"x": 1005.8581305831308, "y": 903.2708184303382, "width": 410.76705748176363, "height": 9.203987018063014, "attribute": "plain text", "valid": true, "id": "swbz5eyr", "sourceID": "", "textAttribute": "", "order": 229}, {"x": 1005.9718321989758, "y": 913.0970093319021, "width": 71.45682919592456, "height": 8.794686670267637, "attribute": "plain text", "valid": true, "id": "r3LNLvW5", "sourceID": "", "textAttribute": "", "order": 230}, {"x": 1006.0124185896899, "y": 924.0404232347187, "width": 314.97358319597777, "height": 8.876301125954562, "attribute": "plain text", "valid": true, "id": "wwgNk5om", "sourceID": "", "textAttribute": "", "order": 231}, {"x": 1006.5273395936891, "y": 935.4697665609425, "width": 340.1220748162503, "height": 8.491186180277387, "attribute": "plain text", "valid": true, "id": "Ge7q1pbw", "sourceID": "", "textAttribute": "", "order": 232}, {"x": 1006.3596711938586, "y": 1041.3311988219373, "width": 196.48445174603714, "height": 8.51895330087194, "attribute": "plain text", "valid": true, "id": "PbCNfJir", "sourceID": "", "textAttribute": "", "order": 233}, {"x": 1006.1300427003179, "y": 1051.957988646641, "width": 327.32451344823215, "height": 9.461162435852234, "attribute": "plain text", "valid": true, "id": "wMmqohM2", "sourceID": "", "textAttribute": "", "order": 234}, {"x": 1005.6445524936305, "y": 1062.3678635684973, "width": 165.80219721181527, "height": 9.171288545752525, "attribute": "plain text", "valid": true, "id": "o55ItARO", "sourceID": "", "textAttribute": "", "order": 235}, {"x": 1005.9803950248709, "y": 1147.25207691043, "width": 248.06942759374218, "height": 9.299707886320713, "attribute": "table_footnote", "valid": true, "id": "2YSyz1KY", "sourceID": "", "textAttribute": "", "order": 236}, {"x": 1006.4114616684037, "y": 1157.797441102501, "width": 76.90401908606961, "height": 7.602006484370099, "attribute": "plain text", "valid": true, "id": "Xs6ZuDeJ", "sourceID": "", "textAttribute": "", "order": 237}, {"x": 1006.0578799714561, "y": 1167.1673560716083, "width": 172.36791518826243, "height": 10.240839999125487, "attribute": "plain text", "valid": true, "id": "E0gS43mU", "sourceID": "", "textAttribute": "", "order": 238}, {"x": 1005.9809977113734, "y": 1178.5227509585873, "width": 75.76495719279201, "height": 9.028352386902752, "attribute": "plain text", "valid": true, "id": "vcrZgDxG", "sourceID": "", "textAttribute": "", "order": 239}, {"x": 1006.4690167593141, "y": 1188.5271414413708, "width": 171.88018919534858, "height": 10.210840458094347, "attribute": "plain text", "valid": true, "id": "V21TAuQn", "sourceID": "", "textAttribute": "", "order": 240}, {"x": 1005.2416935578424, "y": 1356.2885190636596, "width": 79.17254403655699, "height": 8.759515510427581, "attribute": "plain text", "valid": true, "id": "aFlbXlXA", "sourceID": "", "textAttribute": "", "order": 241}, {"x": 987.0539189600922, "y": 1440.0176956040802, "width": 467.1773652046871, "height": 30.601912643983418, "attribute": "table_footnote", "valid": true, "id": "mCJTAfG9", "sourceID": "", "textAttribute": "", "order": 242}, {"x": 987.4734428894501, "y": 1531.1499360921584, "width": 467.79972343187666, "height": 30.861135027039055, "attribute": "table_footnote", "valid": true, "id": "lXmtjNi5", "sourceID": "", "textAttribute": "", "order": 243}, {"x": 1006.0934482083262, "y": 1562.8768842068393, "width": 238.30225515115495, "height": 9.077490077575511, "attribute": "plain text", "valid": true, "id": "rl8qD6my", "sourceID": "", "textAttribute": "", "order": 244}, {"x": 987.304711355605, "y": 1572.815746098069, "width": 466.47049614177126, "height": 20.481684118313375, "attribute": "plain text", "valid": true, "id": "oVAwHpKT", "sourceID": "", "textAttribute": "", "order": 245}, {"x": 1005.5595321331548, "y": 1594.2888823651856, "width": 147.07157698214047, "height": 8.484898672046565, "attribute": "plain text", "valid": true, "id": "7EnivE6Q", "sourceID": "", "textAttribute": "", "order": 246}, {"x": 1005.9946551419774, "y": 1604.0114997180026, "width": 258.3266744020828, "height": 8.770110522156727, "attribute": "plain text", "valid": true, "id": "Qo9aMWO3", "sourceID": "", "textAttribute": "", "order": 247}, {"x": 1006.085503920259, "y": 1615.1570012747407, "width": 437.97289684272874, "height": 9.344866954759878, "attribute": "plain text", "valid": true, "id": "dlkgKWM0", "sourceID": "", "textAttribute": "", "order": 248}, {"x": 1006.6648419126894, "y": 1624.881324478439, "width": 286.8883856515644, "height": 9.331669987628535, "attribute": "plain text", "valid": true, "id": "H5tG3m0s", "sourceID": "", "textAttribute": "", "order": 249}, {"x": 987.1792111951243, "y": 1635.9137188862032, "width": 463.1947835189763, "height": 19.3863973741444, "attribute": "plain text", "valid": true, "id": "AEvuKDL0", "sourceID": "", "textAttribute": "", "order": 250}, {"x": 987.4809137459633, "y": 1730.9412085968695, "width": 461.7618132061379, "height": 18.97685431294418, "attribute": "table_footnote", "valid": true, "id": "eDK9DU8E", "sourceID": "", "textAttribute": "", "order": 251}, {"x": 986.7924517158455, "y": 1751.175779338336, "width": 465.5628813433542, "height": 20.300739625451886, "attribute": "table_footnote", "valid": true, "id": "X2rLQsZ7", "sourceID": "", "textAttribute": "", "order": 252}, {"x": 1005.209257627273, "y": 1773.4716881127376, "width": 224.95090513085464, "height": 9.028992751811822, "attribute": "plain text", "valid": true, "id": "yqvooPHA", "sourceID": "", "textAttribute": "", "order": 253}, {"x": 1005.5868747189527, "y": 1782.561852352932, "width": 345.6666581933196, "height": 10.601409495935723, "attribute": "plain text", "valid": true, "id": "sdPg3gFh", "sourceID": "", "textAttribute": "", "order": 254}, {"x": 1006.3104287565104, "y": 1794.408833803372, "width": 136.55079311508362, "height": 8.489268884138797, "attribute": "plain text", "valid": true, "id": "VlIaxtGy", "sourceID": "", "textAttribute": "", "order": 255}, {"x": 1005.7685605298635, "y": 1804.1624618830206, "width": 259.2069308310443, "height": 9.08629926355245, "attribute": "plain text", "valid": true, "id": "LReObB3j", "sourceID": "", "textAttribute": "", "order": 256}, {"x": 1006.668229582105, "y": 1814.5963948566432, "width": 236.41428585216755, "height": 9.825448149774697, "attribute": "plain text", "valid": true, "id": "njx9CMZa", "sourceID": "", "textAttribute": "", "order": 257}, {"x": 1005.6627319109992, "y": 2186.275861420286, "width": 184.54794718233168, "height": 9.644454866873259, "attribute": "plain text", "valid": true, "id": "mB3NqPfz", "sourceID": "", "textAttribute": "", "order": 258}, {"x": 1005.6747363279802, "y": 2196.8196924530366, "width": 294.1143721878574, "height": 8.395686321097552, "attribute": "plain text", "valid": true, "id": "kKgXo3Om", "sourceID": "", "textAttribute": "", "order": 259}, {"x": 1006.7027171748059, "y": 2205.7584478430067, "width": 193.7625310431994, "height": 9.110700469817136, "attribute": "plain text", "valid": true, "id": "MntmYN59", "sourceID": "", "textAttribute": "", "order": 260}, {"x": 1006.4695125117061, "y": 2216.921851328405, "width": 133.71968763025504, "height": 8.87872661373018, "attribute": "plain text", "valid": true, "id": "qESsHBoz", "sourceID": "", "textAttribute": "", "order": 261}, {"x": 986.9565098418625, "y": 2226.889823031327, "width": 469.4794902944203, "height": 20.824433743316, "attribute": "plain text", "valid": true, "id": "XV5CdSxD", "sourceID": "", "textAttribute": "", "order": 262}, {"x": 1005.0718045295154, "y": 2248.4658023553966, "width": 135.59255493055386, "height": 8.18391278044495, "attribute": "plain text", "valid": true, "id": "jiwZUUZg", "sourceID": "", "textAttribute": "", "order": 263}, {"x": 987.5297140044801, "y": 2258.937651696612, "width": 469.4000557342891, "height": 30.71005480081819, "attribute": "plain text", "valid": true, "id": "7tYZkfXU", "sourceID": "", "textAttribute": "", "order": 264}, {"x": 1492.8981687562243, "y": 339.8491613809596, "width": 156.13107317598698, "height": 9.723700324695015, "attribute": "plain text", "valid": true, "id": "mKYAfdr5", "sourceID": "", "textAttribute": "", "order": 265}, {"x": 1492.6509969256313, "y": 328.8245787834019, "width": 436.49728992966124, "height": 9.27205949092884, "attribute": "table_footnote", "valid": true, "id": "PqXyPvC8", "sourceID": "", "textAttribute": "", "order": 266}, {"x": 1491.4869153148732, "y": 1160.6844143791088, "width": 344.4204188626243, "height": 9.646060343672026, "attribute": "plain text", "valid": true, "id": "6zeVYtWg", "sourceID": "", "textAttribute": "", "order": 267}, {"x": 1492.4814312032966, "y": 1171.7027164192655, "width": 167.76486904496147, "height": 9.199624906047159, "attribute": "plain text", "valid": true, "id": "YEDznXKh", "sourceID": "", "textAttribute": "", "order": 268}, {"x": 1492.203924444937, "y": 1182.1610775716854, "width": 334.43039295345454, "height": 8.647695973644653, "attribute": "plain text", "valid": true, "id": "o5KvQslA", "sourceID": "", "textAttribute": "", "order": 269}, {"x": 1492.7603956047312, "y": 1192.3464303413443, "width": 138.60957598890755, "height": 9.988813903558034, "attribute": "plain text", "valid": true, "id": "ZVIw1CBg", "sourceID": "", "textAttribute": "", "order": 270}, {"x": 1492.1279454217872, "y": 1203.8088260848062, "width": 305.7322390879525, "height": 9.477741954127664, "attribute": "plain text", "valid": true, "id": "yMndfcOK", "sourceID": "", "textAttribute": "", "order": 271}, {"x": 1492.2124389803714, "y": 1214.8883094755308, "width": 129.08238692778585, "height": 9.452612058906471, "attribute": "plain text", "valid": true, "id": "YVW43tWF", "sourceID": "", "textAttribute": "", "order": 272}, {"x": 1492.1039208047819, "y": 1225.5313830220057, "width": 214.11232785746427, "height": 10.028874203923673, "attribute": "plain text", "valid": true, "id": "Q6oTYeYF", "sourceID": "", "textAttribute": "", "order": 273}, {"x": 1492.0208931374648, "y": 1237.3002066967272, "width": 231.82001758972092, "height": 8.498978891585153, "attribute": "plain text", "valid": true, "id": "wCzJJIdQ", "sourceID": "", "textAttribute": "", "order": 274}, {"x": 1492.2370558286823, "y": 1246.8149114170155, "width": 148.05258512425036, "height": 9.35964376034292, "attribute": "plain text", "valid": true, "id": "9UKA01SJ", "sourceID": "", "textAttribute": "", "order": 275}, {"x": 1492.0077913762502, "y": 1257.843456147937, "width": 164.64117865314046, "height": 10.052717828210747, "attribute": "plain text", "valid": true, "id": "JRFIJ4QK", "sourceID": "", "textAttribute": "", "order": 276}, {"x": 1474.136293014987, "y": 1269.2046153923309, "width": 468.37842533667265, "height": 20.137356617333786, "attribute": "plain text", "valid": true, "id": "EEUI1hXD", "sourceID": "", "textAttribute": "", "order": 277}, {"x": 1473.6874463527827, "y": 1290.8271109318293, "width": 469.1421208245433, "height": 20.53106007406432, "attribute": "plain text", "valid": true, "id": "rXYDpXTU", "sourceID": "", "textAttribute": "", "order": 278}, {"x": 1473.2991195958289, "y": 1312.3462062811668, "width": 470.6284044103152, "height": 19.89572092965757, "attribute": "plain text", "valid": true, "id": "9ms82KiX", "sourceID": "", "textAttribute": "", "order": 279}, {"x": 1492.5320095832196, "y": 1333.8614940885402, "width": 374.3333865732338, "height": 9.80674113832553, "attribute": "plain text", "valid": true, "id": "C623lD0y", "sourceID": "", "textAttribute": "", "order": 280}, {"x": 1491.874513289335, "y": 1344.780111575966, "width": 211.22966869617238, "height": 9.386973593300542, "attribute": "plain text", "valid": true, "id": "b0TMxcg5", "sourceID": "", "textAttribute": "", "order": 281}, {"x": 1492.5165437690707, "y": 1355.6221962642257, "width": 126.74351599737382, "height": 9.589325103271312, "attribute": "plain text", "valid": true, "id": "oCRXzP7E", "sourceID": "", "textAttribute": "", "order": 282}, {"x": 1473.8977914277004, "y": 1366.8435387773059, "width": 469.4017743353582, "height": 52.6513748818202, "attribute": "plain text", "valid": true, "id": "WmGkJ5qQ", "sourceID": "", "textAttribute": "", "order": 283}, {"x": 1491.1449134672941, "y": 1421.4008163130657, "width": 232.71568780291963, "height": 8.781856990022332, "attribute": "plain text", "valid": true, "id": "jXSSwq4L", "sourceID": "", "textAttribute": "", "order": 284}, {"x": 1491.693619962408, "y": 1432.3234132019988, "width": 149.8754044484395, "height": 9.564547663734182, "attribute": "plain text", "valid": true, "id": "2t09HQz3", "sourceID": "", "textAttribute": "", "order": 285}, {"x": 1492.5424667209008, "y": 1442.69846246849, "width": 126.28142195645026, "height": 9.17102554590522, "attribute": "plain text", "valid": true, "id": "YtsBYB1M", "sourceID": "", "textAttribute": "", "order": 286}, {"x": 1492.2430529002183, "y": 1452.881104460449, "width": 240.64010218266787, "height": 9.841277608357869, "attribute": "plain text", "valid": true, "id": "paB3TPYY", "sourceID": "", "textAttribute": "", "order": 287}, {"x": 1492.039813984758, "y": 1464.0651262168565, "width": 101.110053671921, "height": 8.50842436726154, "attribute": "plain text", "valid": true, "id": "2mASrfnd", "sourceID": "", "textAttribute": "", "order": 288}, {"x": 1472.9473696803834, "y": 1474.5976703218068, "width": 470.43337346146285, "height": 21.31076040924336, "attribute": "plain text", "valid": true, "id": "QBMXkCyL", "sourceID": "", "textAttribute": "", "order": 289}, {"x": 1473.143314482695, "y": 1496.473826644276, "width": 469.71292747635715, "height": 21.496169117409472, "attribute": "plain text", "valid": true, "id": "VjXVdl98", "sourceID": "", "textAttribute": "", "order": 290}, {"x": 1473.4709246036055, "y": 1519.0854259625182, "width": 469.91946944930845, "height": 41.568384669081574, "attribute": "plain text", "valid": true, "id": "rdFip9u9", "sourceID": "", "textAttribute": "", "order": 291}, {"x": 1473.4339459080775, "y": 1561.7243836028645, "width": 469.67472532633815, "height": 20.9250418198179, "attribute": "plain text", "valid": true, "id": "UrMoZjnh", "sourceID": "", "textAttribute": "", "order": 292}, {"x": 1492.4823661062646, "y": 1584.017428972282, "width": 369.1477746653651, "height": 9.765102847863684, "attribute": "plain text", "valid": true, "id": "14oKXxt1", "sourceID": "", "textAttribute": "", "order": 293}, {"x": 1491.8916027821977, "y": 1760.1327974158041, "width": 198.66456471867886, "height": 9.0959092741542, "attribute": "plain text", "valid": true, "id": "EwU1JayP", "sourceID": "", "textAttribute": "", "order": 294}, {"x": 1492.1373482040733, "y": 1769.8897838502974, "width": 197.4210882372606, "height": 9.61706313220957, "attribute": "plain text", "valid": true, "id": "mIpBl8m8", "sourceID": "", "textAttribute": "", "order": 295}, {"x": 1491.9194929596472, "y": 1942.2103326617134, "width": 205.56322193430458, "height": 8.680536158126683, "attribute": "plain text", "valid": true, "id": "1kusLqkQ", "sourceID": "", "textAttribute": "", "order": 297}, {"x": 1492.8427201236063, "y": 1952.9279190290606, "width": 229.19680206123593, "height": 9.883586146811698, "attribute": "plain text", "valid": true, "id": "fv0bp0I5", "sourceID": "", "textAttribute": "", "order": 298}, {"x": 1492.6606549418289, "y": 1963.3316898359515, "width": 291.74955373211566, "height": 8.939692515303683, "attribute": "plain text", "valid": true, "id": "kgRayr9L", "sourceID": "", "textAttribute": "", "order": 299}, {"x": 1472.7388267240422, "y": 1973.4587125999196, "width": 470.0533790425006, "height": 21.544865233389874, "attribute": "plain text", "valid": true, "id": "7CbHNSoP", "sourceID": "", "textAttribute": "", "order": 300}, {"x": 1491.5010053737356, "y": 2089.8717810622884, "width": 190.11714956748384, "height": 10.590958467632879, "attribute": "table_footnote", "valid": true, "id": "1WcIra79", "sourceID": "", "textAttribute": "", "order": 301}, {"x": 1472.8582536761287, "y": 2100.3644120775416, "width": 466.17496586540017, "height": 21.109384706921034, "attribute": "table_footnote", "valid": true, "id": "6TNYjkSE", "sourceID": "", "textAttribute": "", "order": 302}, {"x": 1492.3946375376013, "y": 2132.8865038446834, "width": 129.09054432656575, "height": 9.225008732250037, "attribute": "plain text", "valid": true, "id": "qIBkY61b", "sourceID": "", "textAttribute": "", "order": 303}, {"x": 1492.821720865643, "y": 2144.1360184106916, "width": 168.25814138204467, "height": 9.411437648927464, "attribute": "plain text", "valid": true, "id": "WR7rNajl", "sourceID": "", "textAttribute": "", "order": 304}, {"x": 1473.7692983080583, "y": 2154.484244255615, "width": 277.38947373415164, "height": 9.392838491850611, "attribute": "plain text", "valid": true, "id": "BsBjrLM5", "sourceID": "", "textAttribute": "", "order": 305}, {"x": 1473.0375373822733, "y": 2165.680911256928, "width": 470.31070013801036, "height": 31.578795973324215, "attribute": "plain text", "valid": true, "id": "BTyJX3n2", "sourceID": "", "textAttribute": "", "order": 306}, {"x": 1473.6992387237897, "y": 2198.1679043845384, "width": 469.7618491498204, "height": 20.690035758559993, "attribute": "plain text", "valid": true, "id": "Qil1C7sl", "sourceID": "", "textAttribute": "", "order": 307}, {"x": 1473.7211209332038, "y": 2218.9973630482123, "width": 469.4877134150936, "height": 21.853635165410463, "attribute": "plain text", "valid": true, "id": "6q8ffORL", "sourceID": "", "textAttribute": "", "order": 308}, {"x": 1492.2234030949237, "y": 2241.9858175295262, "width": 396.6654923031492, "height": 9.29969048049886, "attribute": "plain text", "valid": true, "id": "wJ0B80Xd", "sourceID": "", "textAttribute": "", "order": 309}, {"x": 1494.1927698275047, "y": 2252.3504807839076, "width": 222.0715046790822, "height": 9.386220088460934, "attribute": "plain text", "valid": true, "id": "6u9GwVzH", "sourceID": "", "textAttribute": "", "order": 310}, {"x": 1492.305395678601, "y": 2263.6501046040003, "width": 282.6298536557923, "height": 9.691484254756578, "attribute": "plain text", "valid": true, "id": "RgZMOxAw", "sourceID": "", "textAttribute": "", "order": 311}, {"x": 1493.0840741640723, "y": 2274.295163545268, "width": 108.87174082753108, "height": 8.98151320833147, "attribute": "plain text", "valid": true, "id": "I5aDvsIB", "sourceID": "", "textAttribute": "", "order": 312}, {"x": 1492.4494090652538, "y": 2284.8198493832324, "width": 167.6621065601775, "height": 9.405026281457669, "attribute": "plain text", "valid": true, "id": "uFgYnzfx", "sourceID": "", "textAttribute": "", "order": 313}, {"x": 1492.6424151510116, "y": 2295.344376646516, "width": 153.09125852141116, "height": 10.533710686124309, "attribute": "plain text", "valid": true, "id": "5dryMLjk", "sourceID": "", "textAttribute": "", "order": 314}, {"x": 1492.687554047971, "y": 2306.622341001508, "width": 244.69512561263176, "height": 9.49210645896418, "attribute": "plain text", "valid": true, "id": "XnXmhdrf", "sourceID": "", "textAttribute": "", "order": 315}, {"x": 1492.9903472251651, "y": 2318.0682161799446, "width": 243.121954798156, "height": 9.187599205160755, "attribute": "plain text", "valid": true, "id": "UGmUsDHM", "sourceID": "", "textAttribute": "", "order": 316}, {"x": 1492.5676285608981, "y": 2328.4685810132537, "width": 379.0600031716548, "height": 10.340423046754035, "attribute": "plain text", "valid": true, "id": "6YqiJftc", "sourceID": "", "textAttribute": "", "order": 317}, {"x": 1493.6543792517896, "y": 2339.311266915015, "width": 185.00534398042444, "height": 9.744220303109072, "attribute": "plain text", "valid": true, "id": "aTrLnJBP", "sourceID": "", "textAttribute": "", "order": 318}, {"x": 1492.1538714482303, "y": 2434.266747521075, "width": 164.21352857245142, "height": 9.292512525825934, "attribute": "table_footnote", "valid": true, "id": "nm1QRt8A", "sourceID": "", "textAttribute": "", "order": 319}, {"x": 1492.7910876341296, "y": 2444.49325155046, "width": 251.67822671823626, "height": 10.206175957876866, "attribute": "plain text", "valid": true, "id": "Tof3aH5t", "sourceID": "", "textAttribute": "", "order": 320}, {"x": 1492.7062027496813, "y": 2455.43695496942, "width": 390.30117346506086, "height": 10.480150683381275, "attribute": "plain text", "valid": true, "id": "NSMPSEuL", "sourceID": "", "textAttribute": "", "order": 321}, {"x": 1492.1564282476259, "y": 2467.273409595304, "width": 224.11352431664204, "height": 8.75819411834608, "attribute": "plain text", "valid": true, "id": "71vg8T2A", "sourceID": "", "textAttribute": "", "order": 322}, {"x": 1493.5565695914236, "y": 2477.5983886253134, "width": 231.63129725571105, "height": 9.439331759442979, "attribute": "plain text", "valid": true, "id": "cOgOUWZm", "sourceID": "", "textAttribute": "", "order": 323}, {"x": 1493.001662648858, "y": 2488.747460370063, "width": 268.8094196982567, "height": 10.135209874334166, "attribute": "plain text", "valid": true, "id": "ijdRF5ZD", "sourceID": "", "textAttribute": "", "order": 324}, {"x": 1492.1605080861173, "y": 2499.998800061211, "width": 356.7628804295911, "height": 9.123628984894362, "attribute": "plain text", "valid": true, "id": "dV8VHkQ2", "sourceID": "", "textAttribute": "", "order": 325}, {"x": 1472.6405991790302, "y": 2509.961465212119, "width": 468.13961664194284, "height": 20.196296244270947, "attribute": "plain text", "valid": true, "id": "VOaKsa6Y", "sourceID": "", "textAttribute": "", "order": 326}, {"x": 1492.764326651357, "y": 2531.114608895764, "width": 389.5030704950532, "height": 10.039060599263493, "attribute": "plain text", "valid": true, "id": "fAlh3hqj", "sourceID": "", "textAttribute": "", "order": 327}, {"x": 1494.4407620404884, "y": 2542.736009325711, "width": 230.83562881451408, "height": 9.476578101082703, "attribute": "plain text", "valid": true, "id": "ApiTCZ87", "sourceID": "", "textAttribute": "", "order": 328}, {"x": 1473.2706259561116, "y": 2553.8099396583366, "width": 461.72648416853735, "height": 30.412441537969563, "attribute": "plain text", "valid": true, "id": "HvdhWdnt", "sourceID": "", "textAttribute": "", "order": 329}, {"x": 1492.26532654639, "y": 2586.526202876924, "width": 132.42336614815093, "height": 8.871583752343192, "attribute": "plain text", "valid": true, "id": "SNcQtQIO", "sourceID": "", "textAttribute": "", "order": 330}, {"x": 1492.5497535478482, "y": 2596.6652770103433, "width": 132.25675598468538, "height": 9.576644003884834, "attribute": "plain text", "valid": true, "id": "7eTKH3Wm", "sourceID": "", "textAttribute": "", "order": 331}, {"x": 1491.8892953406842, "y": 2607.1512707029115, "width": 247.2186850373847, "height": 9.988210729531222, "attribute": "plain text", "valid": true, "id": "r73tjpYp", "sourceID": "", "textAttribute": "", "order": 332}, {"x": 1493.3007189819737, "y": 2618.8268467419407, "width": 208.7256700282707, "height": 9.794563368805761, "attribute": "plain text", "valid": true, "id": "yGfOvVu3", "sourceID": "", "textAttribute": "", "order": 333}, {"x": 1492.4493344021346, "y": 2629.742708597041, "width": 262.55996772625974, "height": 9.415335900623896, "attribute": "plain text", "valid": true, "id": "9zHZmLjw", "sourceID": "", "textAttribute": "", "order": 334}, {"x": 1492.1271845791512, "y": 2640.966549341545, "width": 187.89649839285343, "height": 9.480046401962321, "attribute": "plain text", "valid": true, "id": "SoJ3wCRU", "sourceID": "", "textAttribute": "", "order": 335}, {"x": 1492.0752832352605, "y": 2651.3899479348056, "width": 217.9948250772761, "height": 9.229241708206336, "attribute": "plain text", "valid": true, "id": "DdhCKIV0", "sourceID": "", "textAttribute": "", "order": 336}, {"x": 1492.8010784157063, "y": 2661.038260757083, "width": 112.74135755740372, "height": 10.063588190764369, "attribute": "plain text", "valid": true, "id": "ZAbvYLbw", "sourceID": "", "textAttribute": "", "order": 337}, {"x": 1473.4555762436355, "y": 2672.5529599218685, "width": 466.1816378623265, "height": 52.620887784299356, "attribute": "plain text", "valid": true, "id": "3vXJ2Y7f", "sourceID": "", "textAttribute": "", "order": 338}, {"x": 1491.4502559938371, "y": 2726.2907867946005, "width": 194.73830659257064, "height": 10.467782361836067, "attribute": "plain text", "valid": true, "id": "Se4nqlfp", "sourceID": "", "textAttribute": "", "order": 339}, {"x": 1492.9074505862118, "y": 2737.628875080485, "width": 138.79820132195564, "height": 9.782317219885208, "attribute": "plain text", "valid": true, "id": "PHtKrEzd", "sourceID": "", "textAttribute": "", "order": 340}, {"x": 1837.2102829107973, "y": 2842.564728401636, "width": 105.78359734983479, "height": 8.66755732475369, "attribute": "plain text", "valid": true, "id": "nOWXqWnd", "sourceID": "", "textAttribute": "", "order": 341}, {"x": 1836.6193130932006, "y": 2852.4142253615832, "width": 105.58660741063585, "height": 9.455517081549479, "attribute": "plain text", "valid": true, "id": "cqPcZqNt", "sourceID": "", "textAttribute": "", "order": 342}, {"x": 401.05512836999713, "y": 929.9388798018313, "width": 82.45159800784985, "height": 9.293677232098684, "attribute": "table_caption", "valid": true, "id": "UvXzpDmZ", "sourceID": "", "textAttribute": "", "order": 343}, {"x": 32.81171813910118, "y": 917.9228552161924, "width": 123.05489572114004, "height": 9.7287069922369, "attribute": "plain text", "valid": true, "id": "ckDWMuoA", "sourceID": "", "textAttribute": "", "order": 344}, {"x": 173.25148079187062, "y": 1350.7165166481316, "width": 151.03825688068056, "height": 9.953889431457037, "attribute": "figure_caption", "valid": true, "id": "VwWnWY0D", "sourceID": "", "textAttribute": "", "order": 345}, {"x": 33.325265870194926, "y": 2813.015295381437, "width": 64.30574925176676, "height": 9.05714778193898, "attribute": "plain text", "valid": true, "id": "PSJ76B0M", "sourceID": "", "textAttribute": "", "order": 346}, {"x": 32.87240848109797, "y": 2825.0160161925055, "width": 216.2272306960386, "height": 9.144213649234237, "attribute": "plain text", "valid": true, "id": "srhwZVhb", "sourceID": "", "textAttribute": "", "order": 347}, {"x": 32.74119358846091, "y": 2836.140192272235, "width": 117.491520708634, "height": 10.094019626733, "attribute": "plain text", "valid": true, "id": "P2uQlXDt", "sourceID": "", "textAttribute": "", "order": 348}, {"x": 421.53601129312483, "y": 2847.427048866065, "width": 62.49387596506344, "height": 10.49701822850675, "attribute": "plain text", "valid": true, "id": "RZ23gVXG", "sourceID": "", "textAttribute": "", "order": 349}, {"x": 907.1889680010704, "y": 1505.7119733072573, "width": 63.283831667794715, "height": 11.218497432018154, "attribute": "table_caption", "valid": true, "id": "3nAVSUTY", "sourceID": "", "textAttribute": "", "order": 350}, {"x": 518.91035951149, "y": 1474.895968634549, "width": 147.09212649740715, "height": 9.45923652350279, "attribute": "plain text", "valid": true, "id": "a36Ho1Eo", "sourceID": "", "textAttribute": "", "order": 351}, {"x": 519.5526891022263, "y": 1485.462705898879, "width": 216.40361288019182, "height": 9.746614720220672, "attribute": "plain text", "valid": true, "id": "uvlVchDe", "sourceID": "", "textAttribute": "", "order": 352}, {"x": 519.443820303863, "y": 1496.2267081450063, "width": 263.43577024165523, "height": 8.970890780613209, "attribute": "plain text", "valid": true, "id": "AH8NT07r", "sourceID": "", "textAttribute": "", "order": 353}, {"x": 907.3704057180448, "y": 987.1604935856121, "width": 62.59876320944267, "height": 10.149884292658554, "attribute": "table_caption", "valid": true, "id": "oh0TOLqV", "sourceID": "", "textAttribute": "", "order": 354}, {"x": 519.2713931050566, "y": 956.5662707645572, "width": 46.564809972721974, "height": 8.577728152869838, "attribute": "plain text", "valid": true, "id": "btXFE3WX", "sourceID": "", "textAttribute": "", "order": 355}, {"x": 519.6272234091471, "y": 966.5216331835484, "width": 216.05700323875246, "height": 9.493976612804111, "attribute": "plain text", "valid": true, "id": "6c6xS8Mo", "sourceID": "", "textAttribute": "", "order": 356}, {"x": 519.8085504175199, "y": 976.8754398438684, "width": 262.75415112482625, "height": 8.991954843545281, "attribute": "plain text", "valid": true, "id": "GZIa0lIm", "sourceID": "", "textAttribute": "", "order": 357}, {"x": 1374.0345787299234, "y": 1083.897323368428, "width": 82.51794855048972, "height": 9.260693980255052, "attribute": "table_caption", "valid": true, "id": "YiH21Hkw", "sourceID": "", "textAttribute": "", "order": 358}, {"x": 1006.1109312904237, "y": 1073.2361857826236, "width": 76.1120830851697, "height": 9.009734216795707, "attribute": "plain text", "valid": true, "id": "tytdZkQS", "sourceID": "", "textAttribute": "", "order": 359}, {"x": 1006.1308859843051, "y": 1199.479046177488, "width": 96.28534064017929, "height": 8.818657367044457, "attribute": "plain text", "valid": true, "id": "zIkIuvwe", "sourceID": "", "textAttribute": "", "order": 360}, {"x": 1373.6355950940697, "y": 1209.7526694274395, "width": 83.46816380059822, "height": 9.155946539351335, "attribute": "table_caption", "valid": true, "id": "7xrnFYmM", "sourceID": "", "textAttribute": "", "order": 361}, {"x": 1373.5770910991707, "y": 1282.344934527158, "width": 83.00374470815659, "height": 9.863106388781643, "attribute": "table_caption", "valid": true, "id": "czg3QP4j", "sourceID": "", "textAttribute": "", "order": 362}, {"x": 1394.1996684994679, "y": 1376.8107899236586, "width": 62.494214902411336, "height": 9.454844321029022, "attribute": "table_caption", "valid": true, "id": "HyYkBsdo", "sourceID": "", "textAttribute": "", "order": 363}, {"x": 1005.6059561552829, "y": 1273.672030747885, "width": 124.52031970008582, "height": 8.652469344718954, "attribute": "plain text", "valid": true, "id": "aEnLUjqg", "sourceID": "", "textAttribute": "", "order": 364}, {"x": 1006.0916391663989, "y": 1366.4112444423622, "width": 85.63008432276283, "height": 8.593700218771897, "attribute": "plain text", "valid": true, "id": "pEpQQs0g", "sourceID": "", "textAttribute": "", "order": 365}, {"x": 1006.5334379488864, "y": 1471.6595286671786, "width": 85.01991616984711, "height": 9.592955143057969, "attribute": "plain text", "valid": true, "id": "2KeYtW5i", "sourceID": "", "textAttribute": "", "order": 366}, {"x": 1393.5720970794434, "y": 1481.6915816921974, "width": 62.95692948496806, "height": 9.415845758748889, "attribute": "table_caption", "valid": true, "id": "6nFYVPX9", "sourceID": "", "textAttribute": "", "order": 367}, {"x": 1393.4874260312722, "y": 1667.2471551670833, "width": 63.18603277955977, "height": 10.14666219817748, "attribute": "table_caption", "valid": true, "id": "3WxiX4h9", "sourceID": "", "textAttribute": "", "order": 368}, {"x": 1374.0159235303756, "y": 1835.6767478560844, "width": 82.97834699961929, "height": 9.320529100899362, "attribute": "table_caption", "valid": true, "id": "Cm9lQbjO", "sourceID": "", "textAttribute": "", "order": 369}, {"x": 1006.0144731912918, "y": 1656.0975235356066, "width": 252.11572589599976, "height": 10.3688397540703, "attribute": "plain text", "valid": true, "id": "aa4vnCJI", "sourceID": "", "textAttribute": "", "order": 370}, {"x": 1006.560548500308, "y": 1825.179411123556, "width": 245.05243799019945, "height": 8.990426977179824, "attribute": "plain text", "valid": true, "id": "bYIv4yZh", "sourceID": "", "textAttribute": "", "order": 371}, {"x": 1374.1813059475592, "y": 2310.4579632057284, "width": 82.23112772406509, "height": 9.6946171632582, "attribute": "table_caption", "valid": true, "id": "YyyLM3WC", "sourceID": "", "textAttribute": "", "order": 372}, {"x": 1006.1840786496861, "y": 2300.7870216212327, "width": 113.37020848169324, "height": 9.58058099845295, "attribute": "plain text", "valid": true, "id": "pr66cvML", "sourceID": "", "textAttribute": "", "order": 373}, {"x": 1374.1522143706597, "y": 2526.3676597721474, "width": 82.30702989465489, "height": 9.816694648817514, "attribute": "table_caption", "valid": true, "id": "EcRbIgJN", "sourceID": "", "textAttribute": "", "order": 374}, {"x": 1006.5765339883496, "y": 2517.2299660193603, "width": 150.65731709516854, "height": 9.053641468869001, "attribute": "plain text", "valid": true, "id": "0rVeMslT", "sourceID": "", "textAttribute": "", "order": 375}, {"x": 1005.4496397056766, "y": 2847.133793617572, "width": 305.45169482973205, "height": 8.884335143977863, "attribute": "plain text", "valid": true, "id": "kwThAUZj", "sourceID": "", "textAttribute": "", "order": 376}, {"x": 1374.2258670899746, "y": 2856.7270964218214, "width": 82.49935609421041, "height": 10.545030478207345, "attribute": "plain text", "valid": true, "id": "YwoQ2fTs", "sourceID": "", "textAttribute": "", "order": 377}, {"x": 1860.3837219955017, "y": 2759.5850724174034, "width": 82.55693333971671, "height": 10.146662198177472, "attribute": "table_caption", "valid": true, "id": "a3CwNCww", "sourceID": "", "textAttribute": "", "order": 378}, {"x": 1492.607410964695, "y": 2749.180438744304, "width": 250.0918784467689, "height": 9.724072670390473, "attribute": "plain text", "valid": true, "id": "mLX2EthQ", "sourceID": "", "textAttribute": "", "order": 379}, {"x": 1861.3249611400524, "y": 2360.6020259361326, "width": 82.14512900340702, "height": 9.826671236511398, "attribute": "table_caption", "valid": true, "id": "0Q24MxEY", "sourceID": "", "textAttribute": "", "order": 380}, {"x": 1493.1346982809434, "y": 2349.9969799383844, "width": 270.18888635859224, "height": 9.522025587627441, "attribute": "plain text", "valid": true, "id": "r4jnPhau", "sourceID": "", "textAttribute": "", "order": 381}, {"x": 1909.392652596661, "y": 2006.2069575436467, "width": 33.352754652713145, "height": 9.876301135026708, "attribute": "table_caption", "valid": true, "id": "RmwXFaOE", "sourceID": "", "textAttribute": "", "order": 382}, {"x": 1655.2636923884102, "y": 1995.8421664971859, "width": 103.89854546653889, "height": 10.246874896929294, "attribute": "title", "valid": true, "id": "kUolQfMO", "sourceID": "", "textAttribute": "", "order": 383}, {"x": 1889.9362033220796, "y": 1863.3144725830298, "width": 53.47854135542565, "height": 10.303205215265491, "attribute": "table_caption", "valid": true, "id": "A8SPDXTw", "sourceID": "", "textAttribute": "", "order": 384}, {"x": 1860.5052711591943, "y": 1791.3313298146286, "width": 82.58255080049238, "height": 10.010006157635441, "attribute": "table_caption", "valid": true, "id": "ceoT4ReG", "sourceID": "", "textAttribute": "", "order": 385}, {"x": 1492.3366033922032, "y": 1853.1160045100116, "width": 180.46041263902458, "height": 9.417500593094516, "attribute": "plain text", "valid": true, "id": "HI1IENbC", "sourceID": "", "textAttribute": "", "order": 386}, {"x": 1492.3410800691397, "y": 1781.2879675248812, "width": 211.32993759623957, "height": 9.052569959708931, "attribute": "plain text", "valid": true, "id": "uPGkUO0f", "sourceID": "", "textAttribute": "", "order": 387}, {"x": 1880.2510443119133, "y": 1604.4836720469416, "width": 62.91104587882171, "height": 9.770276064513977, "attribute": "table_caption", "valid": true, "id": "wSWRCsT3", "sourceID": "", "textAttribute": "", "order": 388}, {"x": 1492.3657834861885, "y": 1594.4554651111048, "width": 122.21024287350248, "height": 9.964179739416954, "attribute": "plain text", "valid": true, "id": "zyAeSGRF", "sourceID": "", "textAttribute": "", "order": 389}, {"x": 1860.8690656068436, "y": 1052.717953376205, "width": 82.72968523478359, "height": 11.362016856279292, "attribute": "table_caption", "valid": true, "id": "6Ci8dRRq", "sourceID": "", "textAttribute": "", "order": 390}, {"x": 1861.6113082241695, "y": 874.5363279808213, "width": 81.39915502607217, "height": 10.17489437825902, "attribute": "table_caption", "valid": true, "id": "X4oz0vmt", "sourceID": "", "textAttribute": "", "order": 391}, {"x": 1861.0613139334528, "y": 823.1118617988094, "width": 82.49914360750557, "height": 9.899897232900669, "attribute": "table_caption", "valid": true, "id": "8ZO33JFh", "sourceID": "", "textAttribute": "", "order": 392}, {"x": 1492.3046427506376, "y": 1043.3611083775927, "width": 300.9628576641087, "height": 9.011439419141862, "attribute": "plain text", "valid": true, "id": "KqwitFrd", "sourceID": "", "textAttribute": "", "order": 393}, {"x": 1491.870601280877, "y": 863.9289552211528, "width": 171.75367124356342, "height": 9.74323490680155, "attribute": "plain text", "valid": true, "id": "NOVGuMoM", "sourceID": "", "textAttribute": "", "order": 394}, {"x": 1492.274244548739, "y": 812.8485995292863, "width": 207.1749332022743, "height": 9.674801722484343, "attribute": "plain text", "valid": true, "id": "YIU5bieI", "sourceID": "", "textAttribute": "", "order": 395}, {"x": 1491.7975744686273, "y": 681.2755263496707, "width": 278.7792913705694, "height": 9.087112878314018, "attribute": "plain text", "valid": true, "id": "vGmmPdqj", "sourceID": "", "textAttribute": "", "order": 396}, {"x": 1860.787821990746, "y": 691.6320117861696, "width": 82.43187898758691, "height": 9.677743866071335, "attribute": "table_caption", "valid": true, "id": "rxxkKIe9", "sourceID": "", "textAttribute": "", "order": 397}, {"x": 1861.2989199810454, "y": 360.3307710934281, "width": 81.99026600640117, "height": 10.209040851753848, "attribute": "table_caption", "valid": true, "id": "pXgvpGv7", "sourceID": "", "textAttribute": "", "order": 398}, {"x": 1492.649126955323, "y": 351.0139857358287, "width": 278.46044303000576, "height": 9.450400986311406, "attribute": "plain text", "valid": true, "id": "EDImJU7S", "sourceID": "", "textAttribute": "", "order": 399}]}}, "img": "../../test/data/img_label/overlap_1.jpg"}
diff --git a/test/data/test_audio_snr.jsonl b/test/data/test_audio_snr.jsonl
new file mode 100644
index 00000000..9fa30f4e
--- /dev/null
+++ b/test/data/test_audio_snr.jsonl
@@ -0,0 +1 @@
+{"id": 0, "content": "test/data/audio/test.wav"}
diff --git a/test/data/test_img_md.jsonl b/test/data/test_img_md.jsonl
new file mode 100644
index 00000000..764c3da5
--- /dev/null
+++ b/test/data/test_img_md.jsonl
@@ -0,0 +1 @@
+{"id": "1", "content": "即当 \\(x\\longrightarrow0\\) 时, \\(f(x)\\) 与 \\(6x^{2}\\) 互为等价无穷小量,故 \\(c=6,k=3\\) ,应选A.\n\n# 强化20\n\n【解析】当 \\(x\\longrightarrow0^{2}\\) 时,有\n\n\\(\\alpha^{\\prime}=\\cos x^{2}\\rightarrow1\\) ,即 \\(\\alpha\\!\\sim\\!x\\) (为 \\(x\\) 的1阶无穷小量),\n\n\\(\\beta^{\\prime}\\!=\\!\\tan x\\cdot2x\\!\\sim\\!2x^{2}\\) 即 \\(\\beta\\!\\sim\\!\\frac{2}{3}x^{3}\\) (为 \\(x\\) 的3阶无穷小量),\n\n\\(\\gamma^{\\prime}=\\sin x^{\\frac{3}{7}}\\cdot\\frac{1}{2\\sqrt{x}}-x^{\\frac{3}{7}}\\frac{1}{2\\sqrt{x}}=\\frac{1}{2}x\\) 即 \\(\\gamma\\!\\sim\\!\\frac{1}{4}x^{2}\\) (为 \\(x\\) 的2阶无穷小量),\n\n所以当 \\(x\\longrightarrow0\\) 时无穷小量从低阶到高阶的顺序为 \\(\\alpha,\\gamma,\\beta\\) 故应选B.\n\n# 强化21\n\n【解析】方法一:导数定阶法\n\n由当 \\(x\\longrightarrow0^{2}\\) 时,\n\n\\(\\left[\\int_{0}^{x}\\left(\\mathrm{e}^{t^{2}}-1\\right)\\mathrm{d}t\\right]^{\\prime}=\\mathrm{e}^{x^{2}}-1-x^{2}\\) 故 \\(\\int_{0}^{x}\\left(\\mathrm{e}^{t^{2}}-1\\right)\\mathrm{d}t=\\frac{1}{3}x^{3}\\) 为3阶无穷小量;\\(\\left[\\int_{0}^{x}\\ln\\left(1+\\sqrt{t^{2}}\\right)\\mathrm{d}t\\right]^{\\prime}=\\ln\\left(1+\\sqrt{x^{2}}\\right)\\sim\\sqrt{x^{2}}\\) 故 \\(\\int_{0}^{x}\\ln\\left(1+\\sqrt{t^{2}}\\right)\\mathrm{d}t-\\frac{2}{5}x^{\\frac{2}{3}}\\) 为 \\(\\frac{5}{2}\\) 阶无穷小量;\\(\\left[\\int_{0}^{x}\\sin t^{2}\\mathrm{d}t\\right]^{\\prime}=\\sin(\\sin x)^{2}\\cos x-x^{2}\\) 故 \\(\\int_{0}^{x}\\sin t^{2}\\mathrm{d}t-\\frac{1}{3}x^{3}\\) 为3阶无穷小量;\\(\\left[\\int_{0}^{x}(1-\\cos t)\\,\\mathrm{d}t\\right]^{\\prime}-1-\\cos x-\\frac{1}{2}x^{2}\\) 故 \\(\\int_{0}^{x}(1-\\cos t)\\,\\mathrm{d}t-\\frac{1}{6}x^{3}\\) 为3阶无穷小量;\\(\\left[\\int_{0}^{1-\\cos x}\\sqrt{\\sin^{3}t}\\,\\mathrm{d}t\\right]^{\\prime}=\\sqrt{\\sin^{3}(1-\\cos x)}\\,\\cdot\\,\\sin x-\\frac{1}{2}x^{2}\\right]^{\\frac{3}{2}}\\,\\cdot\\,x=\\frac{1}{2\\sqrt{2}}\\,x^{4}\\) 故 \\(\\int_{0}^{1-\\cos x}\\sqrt{\\sin^{3}t}\\,\\mathrm{d}t\\) 为5阶无穷小量,应选E.\n\n\n\n# 方法二:经验法,见【敲重点】\n\n对于选项A, \\(\\int_{0}^{x}\\left(\\mathrm{e}^{t^{2}}-1\\right)\\mathrm{d}t\\) 为 \\(x\\longrightarrow0^{2}\\) 时的 \\(n(m+1)=1\\times(2+1)=3\\) 阶无穷小量;对于选项B, \\(\\int_{0}^{x}\\ln\\left(1+\\sqrt{t^{2}}\\right)\\mathrm{d}t\\) 为 \\(x\\longrightarrow0^{2}\\) 时的 \\(n(m+1)=1\\times\\left({\\frac{3}{2}}+1\\right)={\\frac{5}{2}}\\) 阶无穷小量;对于选项C, \\(\\int_{0}^{1\\sim x}\\sin t^{2}\\mathrm{d}t\\) 为 \\(x\\longrightarrow0^{2}\\) 时的 \\(n(m+1)=1\\times(2+1)=3\\) 阶无穷小量;对于选项D, \\(\\int_{0}^{x}\\left(1-\\cos t\\right)\\mathrm{d}t\\) 为 \\(x\\longrightarrow0^{2}\\) 时的 \\(n(m+1)=1\\times(2+1)=3\\) 阶无穷小量,对于选项E, \\(\\int_{0}^{1-\\cos x}\\sqrt{\\sin^{3}t}\\,\\mathrm{d}t\\) 为 \\(x\\longrightarrow0^{2}\\) 时的 \\(n(m+1)=2\\times\\left({\\frac{3}{2}}+1\\right)=5\\) 阶无穷小量,故应选E.", "img": "../../test/data/c6be64e4-1dd4-4bd4-b923-55a63a6de397_page_1.jpeg"}
diff --git a/test/scripts/data/datasource/test_local.py b/test/scripts/data/datasource/test_local.py
new file mode 100644
index 00000000..216c07b1
--- /dev/null
+++ b/test/scripts/data/datasource/test_local.py
@@ -0,0 +1,144 @@
+import gzip
+import os
+import tempfile
+import unittest
+from pathlib import Path
+
+from dingo.data.datasource.local import load_local_file
+
+
+class TestLocalFileHandling(unittest.TestCase):
+
+ def setUp(self):
+ """设置测试环境"""
+ self.test_dir = tempfile.mkdtemp()
+
+ def tearDown(self):
+ """清理测试环境"""
+ import shutil
+ shutil.rmtree(self.test_dir)
+
+ def test_load_utf8_text_file(self):
+ """测试加载普通UTF-8文本文件"""
+ test_content = "Hello World\n测试中文\n"
+ test_file = os.path.join(self.test_dir, "test.txt")
+
+ with open(test_file, "w", encoding="utf-8") as f:
+ f.write(test_content)
+
+ # 测试按行读取
+ lines = list(load_local_file(test_file, by_line=True))
+ self.assertEqual(len(lines), 2)
+ self.assertEqual(lines[0], "Hello World\n")
+ self.assertEqual(lines[1], "测试中文\n")
+
+ # 测试整体读取
+ content = list(load_local_file(test_file, by_line=False))
+ self.assertEqual(len(content), 1)
+ self.assertEqual(content[0], test_content)
+
+ def test_load_gzip_file(self):
+ """测试加载.gz压缩文件"""
+ test_content = "Compressed content\n压缩内容\n"
+ test_file = os.path.join(self.test_dir, "test.jsonl.gz")
+
+ with gzip.open(test_file, "wt", encoding="utf-8") as f:
+ f.write(test_content)
+
+ # 测试按行读取
+ lines = list(load_local_file(test_file, by_line=True))
+ self.assertEqual(len(lines), 2)
+ self.assertEqual(lines[0], "Compressed content\n")
+ self.assertEqual(lines[1], "压缩内容\n")
+
+ # 测试整体读取
+ content = list(load_local_file(test_file, by_line=False))
+ self.assertEqual(len(content), 1)
+ self.assertEqual(content[0], test_content)
+
+ def test_load_binary_file_error(self):
+ """测试加载二进制文件应该报错"""
+ test_file = os.path.join(self.test_dir, "test.bin")
+
+ # 创建一个包含二进制数据的文件
+ with open(test_file, "wb") as f:
+ f.write(b"\x00\x01\x02\x03\xFF\xFE\xFD")
+
+ with self.assertRaises(RuntimeError) as context:
+ list(load_local_file(test_file))
+
+ self.assertIn("Unsupported file format or encoding", str(context.exception))
+ self.assertIn("UTF-8 text files", str(context.exception))
+
+ def test_load_invalid_gzip_file_error(self):
+ """测试加载无效的.gz文件应该报错"""
+ test_file = os.path.join(self.test_dir, "fake.gz")
+
+ # 创建一个伪造的.gz文件(实际上不是gzip格式)
+ with open(test_file, "w", encoding="utf-8") as f:
+ f.write("This is not a gzip file")
+
+ with self.assertRaises(RuntimeError) as context:
+ list(load_local_file(test_file))
+
+ self.assertIn("Failed to read gzipped file", str(context.exception))
+ self.assertIn("valid gzip-compressed text file", str(context.exception))
+
+ def test_load_non_utf8_file_error(self):
+ """测试加载非UTF-8编码文件应该报错"""
+ test_file = os.path.join(self.test_dir, "test_gbk.txt")
+
+ # 创建一个GBK编码的文件
+ with open(test_file, "w", encoding="gbk") as f:
+ f.write("这是GBK编码的文件")
+
+ with self.assertRaises(RuntimeError) as context:
+ list(load_local_file(test_file))
+
+ self.assertIn("Unsupported file format or encoding", str(context.exception))
+ self.assertIn("UTF-8 text files", str(context.exception))
+
+ def test_load_empty_file(self):
+ """测试加载空文件"""
+ test_file = os.path.join(self.test_dir, "empty.txt")
+
+ with open(test_file, "w", encoding="utf-8"):
+ pass # 创建空文件
+
+ lines = list(load_local_file(test_file, by_line=True))
+ self.assertEqual(len(lines), 0)
+
+ content = list(load_local_file(test_file, by_line=False))
+ self.assertEqual(len(content), 1)
+ self.assertEqual(content[0], "")
+
+ def test_load_directory(self):
+ """测试加载目录中的多个文件"""
+ # 创建多个测试文件
+ file1 = os.path.join(self.test_dir, "file1.txt")
+ file2 = os.path.join(self.test_dir, "file2.jsonl")
+
+ with open(file1, "w", encoding="utf-8") as f:
+ f.write("Content 1\n")
+
+ with open(file2, "w", encoding="utf-8") as f:
+ f.write("Content 2\n")
+
+ lines = list(load_local_file(self.test_dir, by_line=True))
+ # 应该读取到两行内容(每个文件一行)
+ self.assertEqual(len(lines), 2)
+ self.assertIn("Content 1\n", lines)
+ self.assertIn("Content 2\n", lines)
+
+ def test_load_nonexistent_file(self):
+ """测试加载不存在的文件应该报错"""
+ nonexistent_file = os.path.join(self.test_dir, "nonexistent.txt")
+
+ with self.assertRaises(RuntimeError) as context:
+ list(load_local_file(nonexistent_file))
+
+ self.assertIn("is not a valid path", str(context.exception))
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/test/scripts/model/test_modelres.py b/test/scripts/model/test_modelres.py
new file mode 100644
index 00000000..2869ca71
--- /dev/null
+++ b/test/scripts/model/test_modelres.py
@@ -0,0 +1,47 @@
+import os
+import re
+from typing import List
+
+from dingo.config.input_args import EvaluatorRuleArgs
+from dingo.io import Data
+from dingo.model.model import Model
+from dingo.model.modelres import ModelRes
+from dingo.model.rule.base import BaseRule
+
+
+@Model.rule_register('QUALITY_BAD_RELEVANCE', ['test'])
+class RegisterRuleColon(BaseRule):
+ """let user input pattern to search"""
+ dynamic_config = EvaluatorRuleArgs(pattern = "blue")
+
+ @classmethod
+ def eval(cls, input_data: Data) -> ModelRes:
+ res = ModelRes()
+ content = input_data.content
+ if len(content) <= 0:
+ return res
+ if content[-1] == ":":
+ res.error_status = True
+ res.type = [cls.metric_type, 'TestType']
+ res.name = [cls.__name__, 'TestName']
+ res.reason = [content[-100:]]
+ return res
+
+
+class TestModelRes:
+ def test_type_name_list(self):
+
+ data = Data(
+ data_id='0',
+ prompt="",
+ content="Hello! The world is a vast and diverse place, full of wonders, cultures, and incredible natural beauty:"
+ )
+
+ res = RegisterRuleColon().eval(data)
+ # print(res)
+ assert isinstance(res.type, List)
+ assert isinstance(res.name, List)
+ assert len(res.type) == 2
+ assert len(res.name) == 2
+ assert 'TestType' in res.type
+ assert 'TestName' in res.name
diff --git a/web-static/directory-browser.html b/web-static/directory-browser.html
new file mode 100644
index 00000000..e7941522
--- /dev/null
+++ b/web-static/directory-browser.html
@@ -0,0 +1,206 @@
+
+
+
+
+
+ 评估结果目录浏览器
+
+
+
+
+
+
+
+
+
+
+
+ 📂 没有找到评估结果目录
+ 请确保目录中包含有效的 summary.json 文件
+
+
+
+
+
+
|