From 05761af3debecde4dfa84d59290dd85f08233bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 16:49:00 +0200 Subject: [PATCH 01/12] util: synthesis-only metadata support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit genMetrics.py: fall back to 1_synth.sdc for clock extraction when 2_floorplan.sdc is absent (synthesis-only trees, e.g. FLOW_VARIANT=syn); guard the 5_1_grt.log/6_finish.rpt extractions so stages that never ran do not pollute metadata with ERR values; treat empty netlist files like missing ones when hashing (Bazel placeholder files hash like a make run that never wrote the file). genRuleFile.py: add synth instance count (padding) and synth setup WS/TNS (period padding) so rules-syn.json QoR gates cover the metrics synth_syn.tcl reports. Note base-variant update_rules runs will now pick these up too. utils.mk: metadata-synth convenience target (synth + metadata-generate + metadata-check) for make-side smoke runs of the syn variant. Co-Authored-By: Claude Fable 5 Signed-off-by: Øyvind Harboe --- flow/util/genMetrics.py | 43 ++++++++++++++++++++++++++-------------- flow/util/genRuleFile.py | 18 +++++++++++++++++ flow/util/utils.mk | 6 ++++++ 3 files changed, 52 insertions(+), 15 deletions(-) diff --git a/flow/util/genMetrics.py b/flow/util/genMetrics.py index d845a4e065..9f20e89b16 100755 --- a/flow/util/genMetrics.py +++ b/flow/util/genMetrics.py @@ -192,9 +192,12 @@ def git_head_commit(git_exe, folder): def file_sha1(path): - """SHA-1 of `path`, or "N/A" if absent. Read in chunks so large + """SHA-1 of `path`, or "N/A" if absent or empty. Empty counts as + absent so Bazel's touched placeholder files (e.g. the canonicalize + RTLIL under SYNTH_USE_SYN or SYNTH_NETLIST_FILES) hash the same as + a make run that never wrote the file. Read in chunks so large netlists don't blow the heap.""" - if not os.path.isfile(path): + if not os.path.isfile(path) or os.path.getsize(path) == 0: return "N/A" hasher = hashlib.sha1() with open(path, "rb") as f: @@ -258,7 +261,13 @@ def extract_metrics( # Clocks # ========================================================================= - clk_list = read_sdc(resultPath + "/2_floorplan.sdc") + # Prefer the floorplan SDC; on a synthesis-only tree (e.g. the "syn" + # flow variant stops after 1_synth) fall back to the canonicalized + # synthesis SDC, which carries the same create_clock lines. + sdc_file = resultPath + "/2_floorplan.sdc" + if not os.path.isfile(sdc_file): + sdc_file = resultPath + "/1_synth.sdc" + clk_list = read_sdc(sdc_file) metrics_dict["constraints__clocks__count"] = len(clk_list) metrics_dict["constraints__clocks__details"] = clk_list @@ -277,22 +286,26 @@ def extract_metrics( # Global Route # ========================================================================= merge_jsons(logPath, metrics_dict, "5_*.json") - extractTagFromFile( - "globalroute__timing__clock__slack", - metrics_dict, - "^\\[INFO FLW-....\\] Clock .* slack (\\S+)", - logPath + "/5_1_grt.log", - ) + # Guarded so a synthesis-only tree doesn't pollute the metadata with + # "ERR" values for stages that never ran. + if os.path.isfile(logPath + "/5_1_grt.log"): + extractTagFromFile( + "globalroute__timing__clock__slack", + metrics_dict, + "^\\[INFO FLW-....\\] Clock .* slack (\\S+)", + logPath + "/5_1_grt.log", + ) # Finish # ========================================================================= merge_jsons(logPath, metrics_dict, "6_*.json") - extractTagFromFile( - "finish__timing__wns_percent_delay", - metrics_dict, - baseRegEx.format("finish slack div critical path delay", "(\\S+)"), - rptPath + "/6_finish.rpt", - ) + if os.path.isfile(rptPath + "/6_finish.rpt"): + extractTagFromFile( + "finish__timing__wns_percent_delay", + metrics_dict, + baseRegEx.format("finish slack div critical path delay", "(\\S+)"), + rptPath + "/6_finish.rpt", + ) extractGnuTime("finish", metrics_dict, logPath + "/6_report.log") diff --git a/flow/util/genRuleFile.py b/flow/util/genRuleFile.py index 358d59231e..f3562478b8 100755 --- a/flow/util/genRuleFile.py +++ b/flow/util/genRuleFile.py @@ -95,6 +95,24 @@ def gen_rule_file( "round_value": False, "compare": "<=", }, + "synth__design__instance__count__stdcell": { + "mode": "padding", + "padding": 15, + "round_value": True, + "compare": "<=", + }, + "synth__timing__setup__ws": { + "mode": "period_padding", + "padding": 5, + "round_value": False, + "compare": ">=", + }, + "synth__timing__setup__tns": { + "mode": "period_padding", + "padding": 20, + "round_value": False, + "compare": ">=", + }, # clock "constraints__clocks__count": { "mode": "direct", diff --git a/flow/util/utils.mk b/flow/util/utils.mk index 0dbeb1ea6e..5994c071b8 100644 --- a/flow/util/utils.mk +++ b/flow/util/utils.mk @@ -3,6 +3,12 @@ .PHONY: metadata metadata: finish metadata-generate metadata-check +# Synthesis-only metadata: generate and check QoR after just the synth +# stage, without running the full flow. Used with FLOW_VARIANT=syn to +# gate OpenROAD-SYN synthesis results against rules-syn.json. +.PHONY: metadata-synth +metadata-synth: synth metadata-generate metadata-check + .PHONY: metadata-generate metadata-generate: mkdir -p $(REPORTS_DIR) From 3fbe63e000b2054efe6349ee757c332418b8229e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 16:49:00 +0200 Subject: [PATCH 02/12] synth_syn: write 1_synth.v and add opt-in pre/post-synthesis LEC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit synth_syn.tcl now always writes a gate-level 1_synth.v (via write_lec_verilog: physical-only masters removed, LEC_AUX_VERILOG_FILES honored) — the Bazel synthesis action declares it as an output and it is the post-synthesis side of LEC. lec_check.tcl: factor the kepler-formal run/verdict out of run_lec_test into run_lec_config, and add an RTL-vs-netlist synthesis LEC (run_synth_lec_test): the input RTL goes through kepler-formal's experimental slang/SystemVerilog frontend via a generated flist (VERILOG_FILES, +incdir+, defines, -G top params, SYNTH_SLANG_ARGS) and is compared against 1_synth.v + LIB_FILES. Gated by a new SYNTH_LEC_CHECK variable (default 0) rather than LEC_CHECK: LEC_CHECK auto-enables when kepler-formal is installed (flow/settings.mk), and kepler's SV frontend does not yet support all RTL constructs — e.g. gcd's RegEn sequential block fails lowering ('fallback currently supports only multi-LHS reset branches') — so riding the auto-enable would break make synth for every SYNTH_USE_SYN design on developer machines. CTS-stage LEC is unchanged. Co-Authored-By: Claude Fable 5 Signed-off-by: Øyvind Harboe --- flow/scripts/lec_check.tcl | 85 +++++++++++++++++++++++++++++++++++-- flow/scripts/synth_syn.tcl | 14 ++++++ flow/scripts/variables.json | 8 ++++ flow/scripts/variables.yaml | 12 ++++++ 4 files changed, 115 insertions(+), 4 deletions(-) diff --git a/flow/scripts/lec_check.tcl b/flow/scripts/lec_check.tcl index 3b3384c055..ac7c431b00 100644 --- a/flow/scripts/lec_check.tcl +++ b/flow/scripts/lec_check.tcl @@ -6,6 +6,18 @@ proc lec_check_enabled { } { }] } +# Synthesis (RTL vs netlist) LEC is a separate opt-in: the RTL side needs +# kepler-formal's experimental SystemVerilog frontend, which does not yet +# support all RTL constructs, so it must not ride LEC_CHECK's +# auto-enable-when-installed behavior (flow/settings.mk). +proc synth_lec_check_enabled { } { + return [expr { + [env_var_equals SYNTH_LEC_CHECK 1] + && [info exists ::env(KEPLER_FORMAL_EXE)] + && [file executable $::env(KEPLER_FORMAL_EXE)] + }] +} + proc write_lec_verilog { filename } { set remove_cells [find_physical_only_masters] if { [env_var_exists_and_non_empty REMOVE_CELLS_FOR_LEC] } { @@ -46,8 +58,9 @@ proc write_lec_script { step file1 file2 } { close $outfile } -proc run_lec_test { step file1 file2 } { - write_lec_script $step $file1 $file2 +# Run kepler-formal on a previously written ${step}_lec_test.yml and +# fail with a message naming `what` if the log reports a difference. +proc run_lec_config { step what } { # tclint-disable-next-line command-args eval exec $::env(KEPLER_FORMAL_EXE) --config $::env(OBJECTS_DIR)/${step}_lec_test.yml try { @@ -57,8 +70,72 @@ proc run_lec_test { step file1 file2 } { set count 0 } if { $count > 0 } { - error "Repair timing output failed lec test" + error "$what failed lec test" } else { - puts "Repair timing output passed lec test" + puts "$what passed lec test" } } + +proc run_lec_test { step file1 file2 } { + write_lec_script $step $file1 $file2 + run_lec_config $step "Repair timing output" +} + +# Write a slang command file describing the design RTL exactly as +# synth_syn.tcl elaborates it, so kepler-formal's SystemVerilog frontend +# sees the same design. Not replicated (slang defaults differ): +# --compat=vcs, --ignore-assertions, --no-implicit-memories, --std; +# designs that depend on those may fail LEC for frontend reasons. +proc write_sv_rtl_flist { path } { + set out [open $path w] + puts $out "-D SYNTHESIS" + if { [env_var_exists_and_non_empty VERILOG_DEFINES] } { + # Flag/value token stream (e.g. "-D NAME"); keep on one line. + puts $out $::env(VERILOG_DEFINES) + } + if { [env_var_exists_and_non_empty VERILOG_INCLUDE_DIRS] } { + foreach dir $::env(VERILOG_INCLUDE_DIRS) { + puts $out "+incdir+$dir" + } + } + dict for {key value} [env_var_or_empty VERILOG_TOP_PARAMS] { + puts $out "-G $key=$value" + } + if { [env_var_exists_and_non_empty SYNTH_SLANG_ARGS] } { + puts $out $::env(SYNTH_SLANG_ARGS) + } + foreach fn $::env(VERILOG_FILES) { + puts $out [string trim $fn] + } + close $out +} + +# YAML config comparing the input RTL (slang frontend) against a +# gate-level netlist + liberty models. +proc write_sv_lec_script { step rtl_flist gate_flist } { + set outfile [open "$::env(OBJECTS_DIR)/${step}_lec_test.yml" w] + puts $outfile "format: systemverilog" + puts $outfile "sv_design1_flist: $rtl_flist" + puts $outfile "sv_design1_top: $::env(DESIGN_NAME)" + puts $outfile "sv_design2_flist: $gate_flist" + puts $outfile "sv_design2_top: $::env(DESIGN_NAME)" + puts $outfile "liberty_files:" + foreach libFile $::env(LIB_FILES) { + puts $outfile " - $libFile" + } + puts $outfile "log_file: $::env(LOG_DIR)/${step}_lec_check.log" + close $outfile +} + +# Pre- vs post-synthesis LEC: input RTL against the 1_synth.v netlist +# written by synth_syn.tcl. Caller guards with lec_check_enabled. +proc run_synth_lec_test { } { + set rtl_flist $::env(OBJECTS_DIR)/1_synth_rtl.f + set gate_flist $::env(OBJECTS_DIR)/1_synth_gate.f + write_sv_rtl_flist $rtl_flist + set out [open $gate_flist w] + puts $out "$::env(RESULTS_DIR)/1_synth.v" + close $out + write_sv_lec_script 1_synth $rtl_flist $gate_flist + run_lec_config 1_synth "Synthesis output" +} diff --git a/flow/scripts/synth_syn.tcl b/flow/scripts/synth_syn.tcl index efe1f7779b..f8e58149c2 100644 --- a/flow/scripts/synth_syn.tcl +++ b/flow/scripts/synth_syn.tcl @@ -75,3 +75,17 @@ orfs_write_db $::env(RESULTS_DIR)/1_synth.odb # out by OpenSTA that has no dependencies. Sole writer of # 1_synth.sdc. orfs_write_sdc $::env(RESULTS_DIR)/1_synth.sdc + +# Gate-level netlist for LEC (kepler-formal compares it against the input +# RTL) and any other netlist consumer. The Bazel synthesis action declares +# this file as an output, so it must be written unconditionally. +source $::env(SCRIPTS_DIR)/lec_check.tcl +write_lec_verilog 1_synth.v + +# Pre- vs post-synthesis LEC. Explicit opt-in via SYNTH_LEC_CHECK=1 — +# unlike the CTS-stage LEC it does not auto-enable when kepler-formal is +# installed, because the RTL side depends on kepler's experimental +# SystemVerilog frontend. +if { [synth_lec_check_enabled] } { + run_synth_lec_test +} diff --git a/flow/scripts/variables.json b/flow/scripts/variables.json index bc9be9bdea..823a55d643 100644 --- a/flow/scripts/variables.json +++ b/flow/scripts/variables.json @@ -490,6 +490,7 @@ "LEC_AUX_VERILOG_FILES": { "description": "Additional Verilog files (e.g. blackbox stubs) to include in LEC equivalence checks. Appended to the generated Verilog netlist before running the formal equivalence check.\n", "stages": [ + "synth", "cts" ] }, @@ -1309,6 +1310,13 @@ "synth" ] }, + "SYNTH_LEC_CHECK": { + "default": 0, + "description": "Run a formal equivalence check between the input RTL and the OpenROAD-SYN synthesis netlist (1_synth.v). The RTL side goes through kepler-formal's experimental SystemVerilog frontend, which does not yet support all RTL constructs, so this is a separate opt-in from LEC_CHECK (which auto-enables when kepler-formal is installed and compares gate-level netlists only). Requires KEPLER_FORMAL_EXE.\n", + "stages": [ + "synth" + ] + }, "SYNTH_MEMORY_MAX_BITS": { "default": 4096, "description": "Maximum number of bits for memory synthesis. Ideally, real RAM or realistic fakeram should be used for RAMs much larger than 1024 bits. To temporarily ignore the RAM concerns and investigate other aspects of the design, consider setting `SYNTH_MOCK_LARGE_MEMORIES=1`, or adjusting `SYNTH_MEMORY_MAX_BITS`.\n", diff --git a/flow/scripts/variables.yaml b/flow/scripts/variables.yaml index 24802995b2..ced33f1e65 100644 --- a/flow/scripts/variables.yaml +++ b/flow/scripts/variables.yaml @@ -1579,12 +1579,24 @@ LEC_CHECK: default: 0 stages: - cts +SYNTH_LEC_CHECK: + description: > + Run a formal equivalence check between the input RTL and the + OpenROAD-SYN synthesis netlist (1_synth.v). The RTL side goes through + kepler-formal's experimental SystemVerilog frontend, which does not + yet support all RTL constructs, so this is a separate opt-in from + LEC_CHECK (which auto-enables when kepler-formal is installed and + compares gate-level netlists only). Requires KEPLER_FORMAL_EXE. + default: 0 + stages: + - synth LEC_AUX_VERILOG_FILES: description: > Additional Verilog files (e.g. blackbox stubs) to include in LEC equivalence checks. Appended to the generated Verilog netlist before running the formal equivalence check. stages: + - synth - cts REMOVE_CELLS_FOR_LEC: description: > From d909283a64748094239fc17f922273c1ffe528b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 18:25:29 +0200 Subject: [PATCH 03/12] util: OpenROAD-SYN status plots (QoR deltas, runtime A/B, clock period) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit plotSynQoR.py renders the syn-vs-yosys synthesis QoR comparison from per-design best-effort qor.json pairs: percent-delta panels (std-cell area, instance count, runtime) plus an absolute SYN worst-slack panel, with failed designs drawn as hatched FAIL columns instead of omitted. --runtime-output adds an absolute runtime A/B grouped-bar chart (log scale) from the same inputs. plotClockPeriod.py renders effective clock period (target - gated worst slack) across synth/cts/globalroute/finish, one series per design, from the checked-in rules-*.json files alone — the OpenROAD-SYN synthesis point overlays the regular flow's trajectory, no flow runs needed. genMetrics.py gains a scalar constraints__clocks__period metric (rule files cannot carry the details list) and genRuleFile.py propagates it as a direct == rule, so regenerated rules files feed the clock-period plot. Both scripts are matplotlib py_binaries fed from the @orfs-pip hub, so bazelisk build needs no host python packages; output is deterministic (Agg, fixed geometry, no timestamps) for meaningful PNG diffs. Co-Authored-By: Claude Fable 5 Signed-off-by: Øyvind Harboe --- flow/util/BUILD | 22 +- flow/util/genMetrics.py | 11 + flow/util/genRuleFile.py | 5 + flow/util/plotClockPeriod.py | 204 ++++++++++++++++ flow/util/plotSynQoR.py | 434 +++++++++++++++++++++++++++++++++++ 5 files changed, 675 insertions(+), 1 deletion(-) create mode 100644 flow/util/plotClockPeriod.py create mode 100644 flow/util/plotSynQoR.py diff --git a/flow/util/BUILD b/flow/util/BUILD index cc21b559c6..aa9f3105e2 100644 --- a/flow/util/BUILD +++ b/flow/util/BUILD @@ -1,4 +1,4 @@ -load("@rules_python//python:defs.bzl", "py_library", "py_test") +load("@rules_python//python:defs.bzl", "py_binary", "py_library", "py_test") load("@rules_python//python:pip.bzl", "compile_pip_requirements") exports_files(["open_plots.sh"]) @@ -39,6 +39,26 @@ py_library( imports = ["."], ) +# Renders the OpenROAD-SYN vs yosys synthesis QoR comparison graph from +# per-design qor.json pairs (see //flow/designs/asap7:syn_qor_png). +# matplotlib comes from the @orfs-pip hub, so `bazelisk build` needs no +# host python packages. +py_binary( + name = "plotSynQoR", + srcs = ["plotSynQoR.py"], + visibility = ["//visibility:public"], + deps = ["@orfs-pip//matplotlib"], +) + +# Renders effective clock period across flow stages from the checked-in +# rules-*.json QoR gates (see //flow/designs/asap7:clock_period_png). +py_binary( + name = "plotClockPeriod", + srcs = ["plotClockPeriod.py"], + visibility = ["//visibility:public"], + deps = ["@orfs-pip//matplotlib"], +) + py_test( name = "genMetrics_test", srcs = ["genMetrics_test.py"], diff --git a/flow/util/genMetrics.py b/flow/util/genMetrics.py index 9f20e89b16..55c818bc81 100755 --- a/flow/util/genMetrics.py +++ b/flow/util/genMetrics.py @@ -270,6 +270,17 @@ def extract_metrics( clk_list = read_sdc(sdc_file) metrics_dict["constraints__clocks__count"] = len(clk_list) metrics_dict["constraints__clocks__details"] = clk_list + # Scalar clock period (min across clocks) so rule files can carry it: + # checkMetadata.py cannot compare the details list, and QoR plots need + # the period to turn per-stage worst slack into an effective period. + periods = [] + for clk in clk_list: + try: + periods.append(float(clk.split()[-1])) + except (ValueError, IndexError): + pass + if periods: + metrics_dict["constraints__clocks__period"] = min(periods) # Floorplan # ========================================================================= diff --git a/flow/util/genRuleFile.py b/flow/util/genRuleFile.py index f3562478b8..5733c07367 100755 --- a/flow/util/genRuleFile.py +++ b/flow/util/genRuleFile.py @@ -119,6 +119,11 @@ def gen_rule_file( "round_value": True, "compare": "==", }, + "constraints__clocks__period": { + "mode": "direct", + "round_value": False, + "compare": "==", + }, # place "placeopt__design__instance__area": { "mode": "padding", diff --git a/flow/util/plotClockPeriod.py b/flow/util/plotClockPeriod.py new file mode 100644 index 0000000000..fdcf5d3347 --- /dev/null +++ b/flow/util/plotClockPeriod.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python3 +"""Plot effective clock period across flow stages from rules-*.json. + +For every design, rules-base.json carries the QoR-gated setup worst +slack of the design's regular flow at the synth/cts/globalroute/finish +stages, and rules-syn.json carries the OpenROAD-SYN synthesis-only +gate. Effective period = clock period - worst slack, i.e. the period +the design would need to meet timing. One line per design (regular +flow), with the OpenROAD-SYN post-synthesis point overlaid as a diamond +so the two synthesis engines can be compared without running any flow. + +The values are QoR gates (padded by genRuleFile.py), not measurements — +both engines are padded identically, so the comparison is fair, but the +absolute numbers include rule margin. + +Usage: + plotClockPeriod.py --output png \\ + --design gcd --rules-base .../rules-base.json --rules-syn .../rules-syn.json \\ + [--design ... --rules-base ... --rules-syn ...] + +Deterministic output (Agg backend, fixed geometry, no timestamps). +""" + +import argparse +import json +import sys + +import matplotlib + +matplotlib.use("Agg") + +import matplotlib.pyplot as plt # noqa: E402 +from matplotlib.ticker import ScalarFormatter # noqa: E402 + +STAGES = ["synth", "cts", "globalroute", "finish"] + +TEXT_PRIMARY = "#0b0b0b" +TEXT_SECONDARY = "#52514e" +SURFACE = "#fcfcfb" +SYN_MARKER_EDGE = "#0b0b0b" + + +def parse_args(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", required=True, help="Output PNG path") + parser.add_argument( + "--title", + default="Effective clock period across stages (rules-*.json gates, asap7)", + help="Figure title", + ) + parser.add_argument("--design", action="append", default=[], help="Design name") + parser.add_argument( + "--rules-base", action="append", default=[], help="rules-base.json path" + ) + parser.add_argument( + "--rules-syn", action="append", default=[], help="rules-syn.json path" + ) + args = parser.parse_args() + if not (len(args.design) == len(args.rules_base) == len(args.rules_syn)): + parser.error( + "--design/--rules-base/--rules-syn must be given the same number of times" + ) + if not args.design: + parser.error("at least one design is required") + return args + + +def load_rules(path): + try: + with open(path) as f: + return json.load(f) + except (OSError, json.JSONDecodeError) as e: + print(f"[WARN] cannot read {path}: {e}", file=sys.stderr) + return {} + + +def rule_number(rules, field): + rule = rules.get(field) + if not rule: + return None + value = rule.get("value") + if isinstance(value, (int, float)) and not isinstance(value, bool): + return float(value) + return None + + +def main(): + args = parse_args() + + fig, ax = plt.subplots(figsize=(9.0, 7.0), dpi=120) + fig.patch.set_facecolor(SURFACE) + ax.set_facecolor(SURFACE) + + cmap = plt.get_cmap("tab20") + x = range(len(STAGES)) + skipped = [] + plotted = 0 + + for idx, (design, base_path, syn_path) in enumerate( + zip(args.design, args.rules_base, args.rules_syn) + ): + base = load_rules(base_path) + syn = load_rules(syn_path) + period = rule_number(syn, "constraints__clocks__period") or rule_number( + base, "constraints__clocks__period" + ) + if period is None: + skipped.append(design) + continue + + color = cmap(idx % 20) + ys = [ + ( + period - ws + if (ws := rule_number(base, f"{stage}__timing__setup__ws")) is not None + else None + ) + for stage in STAGES + ] + xs = [i for i, y in zip(x, ys) if y is not None] + vals = [y for y in ys if y is not None] + if vals: + ax.plot( + xs, + vals, + marker="o", + markersize=4, + linewidth=1.6, + color=color, + zorder=2, + ) + # Direct label at the line end; text in ink, mark carries color. + ax.annotate( + design, + (xs[-1], vals[-1]), + textcoords="offset points", + xytext=(6, 0), + fontsize=7, + color=TEXT_PRIMARY, + va="center", + zorder=3, + ) + plotted += 1 + + syn_ws = rule_number(syn, "synth__timing__setup__ws") + if syn_ws is not None: + ax.plot( + [0], + [period - syn_ws], + marker="D", + markersize=7, + linestyle="none", + markerfacecolor=color, + markeredgecolor=SYN_MARKER_EDGE, + markeredgewidth=0.8, + zorder=4, + ) + + ax.set_xticks(list(x)) + ax.set_xticklabels(STAGES, fontsize=9) + ax.set_yscale("log") + for set_formatter in [ax.yaxis.set_major_formatter, ax.yaxis.set_minor_formatter]: + formatter = ScalarFormatter() + formatter.set_scientific(False) + set_formatter(formatter) + ax.set_ylabel("effective clock period: target - worst slack (ps, log)", fontsize=9) + ax.grid(axis="y", which="both", color="#e5e4e0", linewidth=0.6, zorder=0) + ax.tick_params(colors=TEXT_SECONDARY, labelsize=8) + for spine in ax.spines.values(): + spine.set_visible(False) + ax.margins(x=0.12) + + title = args.title + if skipped: + title += "\n(no period rule yet: {})".format(", ".join(skipped)) + ax.set_title(title, fontsize=11, color=TEXT_PRIMARY, loc="left") + + handles = [ + plt.Line2D([], [], marker="o", linewidth=1.6, color=TEXT_SECONDARY), + plt.Line2D( + [], + [], + marker="D", + linestyle="none", + markersize=7, + markerfacecolor=SURFACE, + markeredgecolor=SYN_MARKER_EDGE, + ), + ] + ax.legend( + handles, + ["regular flow (rules-base.json)", "OpenROAD-SYN synth (rules-syn.json)"], + loc="upper right", + fontsize=8, + frameon=False, + ) + + fig.tight_layout() + fig.savefig(args.output, facecolor=fig.get_facecolor()) + print(f"Wrote {args.output} ({plotted} designs, {len(skipped)} skipped)") + + +if __name__ == "__main__": + main() diff --git a/flow/util/plotSynQoR.py b/flow/util/plotSynQoR.py new file mode 100644 index 0000000000..33eff3e765 --- /dev/null +++ b/flow/util/plotSynQoR.py @@ -0,0 +1,434 @@ +#!/usr/bin/env python3 +"""Plot synthesis QoR of OpenROAD-SYN vs yosys across designs. + +Consumes per-design qor.json pairs produced by bazel-orfs's best-effort +orfs_synth_qor targets (_syn_qor / _yosys_qor): each file +is either a synthesis-only metadata.json or a failure marker +{"orfs_qor_failed": true, ...}. Designs whose synthesis failed are drawn +as hatched FAIL columns rather than omitted, so the output is a status +report of OpenROAD-SYN across the design suite. + +Usage: + plotSynQoR.py --output qor.png \\ + --design gcd --syn gcd_syn.json --base gcd_yosys.json \\ + --design aes --syn aes_syn.json --base aes_yosys.json ... + +The output is deterministic (Agg backend, fixed geometry, no timestamps) +so the PNG can be checked in and diffed meaningfully. +""" + +import argparse +import json +import sys + +import matplotlib + +matplotlib.use("Agg") + +import matplotlib.pyplot as plt # noqa: E402 +from matplotlib.ticker import ScalarFormatter # noqa: E402 +from matplotlib.transforms import blended_transform_factory # noqa: E402 + +# Palette: diverging pair and A/B categorical pair (validated for CVD +# separation and contrast on a light surface), neutral grays for small +# deltas and failure states. +BETTER = "#2a78d6" +WORSE = "#c44536" +SERIES_YOSYS = "#2a78d6" +SERIES_SYN = "#eb6834" +NEUTRAL = "#6a6965" +FAIL_FACE = "#e8e7e3" +FAIL_EDGE = "#52514e" +TEXT_PRIMARY = "#0b0b0b" +TEXT_SECONDARY = "#52514e" +SURFACE = "#fcfcfb" + +# Deltas within this band (percent or ps) are drawn neutral: they carry +# no better/worse verdict at this resolution. +NEUTRAL_BAND = 1.0 + + +def parse_args(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", required=True, help="Output PNG path") + parser.add_argument( + "--runtime-output", + default=None, + help="Optional second PNG: absolute synthesis runtime A/B " + "(yosys vs OpenROAD-SYN) per design", + ) + parser.add_argument( + "--title", + default="OpenROAD-SYN vs yosys: synthesis QoR (asap7)", + help="Figure title", + ) + parser.add_argument( + "--design", action="append", default=[], help="Design name (repeat)" + ) + parser.add_argument( + "--syn", + action="append", + default=[], + help="qor.json from the OpenROAD-SYN run (repeat, pairs with --design)", + ) + parser.add_argument( + "--base", + action="append", + default=[], + help="qor.json from the yosys baseline run (repeat, pairs with --design)", + ) + args = parser.parse_args() + if not (len(args.design) == len(args.syn) == len(args.base)): + parser.error("--design/--syn/--base must be given the same number of times") + if not args.design: + parser.error("at least one --design/--syn/--base triple is required") + return args + + +def load_qor(path): + """Load a qor.json; returns (metrics_dict, failed).""" + try: + with open(path) as f: + data = json.load(f) + except (OSError, json.JSONDecodeError) as e: + print(f"[WARN] treating {path} as failed: {e}", file=sys.stderr) + return {}, True + return data, bool(data.get("orfs_qor_failed")) + + +def get_number(metrics, key): + value = metrics.get(key) + if isinstance(value, (int, float)) and not isinstance(value, bool): + return float(value) + return None + + +def percent_delta(syn, base): + if syn is None or base is None or base == 0: + return None + return 100.0 * (syn - base) / abs(base) + + +# Panel definitions: (title, y-axis label, function(syn_metrics, +# base_metrics) -> value or None). Percent panels: negative = SYN smaller. +def _area_delta(syn, base): + return percent_delta( + get_number(syn, "synth__design__instance__area__stdcell"), + get_number(base, "synth__design__instance__area__stdcell"), + ) + + +def _count_delta(syn, base): + return percent_delta( + get_number(syn, "synth__design__instance__count__stdcell"), + get_number(base, "synth__design__instance__count__stdcell"), + ) + + +def runtime_seconds(metrics): + """Synthesis runtime in seconds: synth__elapsed_seconds when numeric, + else gnu-time's synth__runtime__total ("[H:]M:SS.frac").""" + value = get_number(metrics, "synth__elapsed_seconds") + if value is not None: + return value + total = metrics.get("synth__runtime__total") + if not isinstance(total, str): + return None + parts = total.split(":") + try: + seconds = float(parts[-1]) + if len(parts) > 1: + seconds += 60 * int(parts[-2]) + if len(parts) > 2: + seconds += 3600 * int(parts[-3]) + except ValueError: + return None + return seconds + + +def _runtime_delta(syn, base): + return percent_delta(runtime_seconds(syn), runtime_seconds(base)) + + +def _syn_ws(syn, base): + return get_number(syn, "synth__timing__setup__ws") + + +PANELS = [ + ( + "Std-cell area, SYN vs yosys", + "Δ area (%)", + _area_delta, + "delta", + False, + ), + ( + "Std-cell instance count, SYN vs yosys", + "Δ instances (%)", + _count_delta, + "delta", + False, + ), + ( + "Synthesis runtime, SYN vs yosys", + "Δ runtime (%)", + _runtime_delta, + "delta", + False, + ), + ( + "OpenROAD-SYN setup worst slack after synthesis " + "(no yosys equivalent metric)", + "WS (ps)", + _syn_ws, + "absolute", + True, + ), +] + + +def bar_color(value, kind, higher_is_better): + if kind == "absolute": + return NEUTRAL + if abs(value) <= NEUTRAL_BAND: + return NEUTRAL + improved = value > 0 if higher_is_better else value < 0 + return BETTER if improved else WORSE + + +def render_runtime_ab(path, title, loaded): + """Absolute synthesis runtime A/B: yosys vs OpenROAD-SYN per design. + + Grouped bars on a log axis (runtimes span seconds to hours across the + suite). A failed side renders as a hatched marker column instead of a + bar. Note the yosys number is the main yosys step (canonicalization + excluded), the SYN number is the whole synth_syn.tcl run. + """ + designs = [entry[0] for entry in loaded] + n = len(designs) + fig, ax = plt.subplots(figsize=(max(8.0, 0.75 * n + 2.0), 5.0), dpi=120) + fig.patch.set_facecolor(SURFACE) + ax.set_facecolor(SURFACE) + + width = 0.38 + finite = [] + for _, syn, syn_failed, base, base_failed in loaded: + for metrics, failed in [(base, base_failed), (syn, syn_failed)]: + value = None if failed else runtime_seconds(metrics) + if value: + finite.append(value) + for i, (name, syn, syn_failed, base, base_failed) in enumerate(loaded): + for offset, metrics, failed, color in [ + (-width / 2, base, base_failed, SERIES_YOSYS), + (width / 2, syn, syn_failed, SERIES_SYN), + ]: + value = None if failed else runtime_seconds(metrics) + if value is None: + ax.text( + i + offset, + 0.5, + "FAIL" if failed else "n/a", + transform=blended_transform_factory(ax.transData, ax.transAxes), + rotation=90, + ha="center", + va="center", + fontsize=7, + color=FAIL_EDGE, + zorder=3, + ) + else: + ax.bar(i + offset, value, width=width, color=color, zorder=2) + ax.text( + i + offset, + value * 1.08, + f"{value:.0f}" if value >= 10 else f"{value:.1f}", + ha="center", + va="bottom", + fontsize=7, + color=TEXT_PRIMARY, + zorder=3, + ) + + ax.set_yscale("log") + if finite: + # Explicit headroom so on-bar value labels stay inside the axes; + # ax.margins is additive and misbehaves on a log scale. + ax.set_ylim(min(finite) / 1.6, max(finite) * 1.6) + for set_formatter in [ax.yaxis.set_major_formatter, ax.yaxis.set_minor_formatter]: + formatter = ScalarFormatter() + formatter.set_scientific(False) + set_formatter(formatter) + ax.set_ylabel( + "synthesis runtime (s, log) — yosys main step vs whole SYN run", + fontsize=9, + color=TEXT_SECONDARY, + ) + ax.set_xticks(range(n)) + ax.set_xticklabels(designs, rotation=45, ha="right", fontsize=8) + ax.grid(axis="y", which="both", color="#e5e4e0", linewidth=0.6, zorder=0) + ax.tick_params(colors=TEXT_SECONDARY, labelsize=8) + for spine in ax.spines.values(): + spine.set_visible(False) + ax.set_title(title, fontsize=11, color=TEXT_PRIMARY, loc="left") + ax.legend( + [ + plt.Rectangle((0, 0), 1, 1, color=SERIES_YOSYS), + plt.Rectangle((0, 0), 1, 1, color=SERIES_SYN), + ], + ["yosys", "OpenROAD-SYN"], + loc="upper left", + fontsize=8, + frameon=False, + ) + fig.tight_layout() + fig.savefig(path, facecolor=fig.get_facecolor()) + print(f"Wrote {path}") + + +def main(): + args = parse_args() + + designs = args.design + loaded = [] + for name, syn_path, base_path in zip(designs, args.syn, args.base): + syn, syn_failed = load_qor(syn_path) + base, base_failed = load_qor(base_path) + loaded.append((name, syn, syn_failed, base, base_failed)) + + n = len(designs) + x = range(n) + fig, axes = plt.subplots( + len(PANELS), + 1, + figsize=(max(8.0, 0.75 * n + 2.0), 3.0 * len(PANELS)), + sharex=True, + dpi=120, + ) + fig.patch.set_facecolor(SURFACE) + + for ax, (title, ylabel, fn, kind, higher_is_better) in zip(axes, PANELS): + ax.set_facecolor(SURFACE) + values = [] + for name, syn, syn_failed, base, base_failed in loaded: + values.append(None if (syn_failed or base_failed) else fn(syn, base)) + + finite = [v for v in values if v is not None] + span = max((abs(v) for v in finite), default=1.0) or 1.0 + + for i, ((name, syn, syn_failed, base, base_failed), value) in enumerate( + zip(loaded, values) + ): + if syn_failed or base_failed: + # Hatched full-height FAIL column: the point of this graph + # is to show failures, not hide them. + ax.axvspan( + i - 0.4, + i + 0.4, + facecolor=FAIL_FACE, + edgecolor=FAIL_EDGE, + hatch="//", + linewidth=0.6, + zorder=1, + ) + which = "SYN" if syn_failed else "yosys" + if syn_failed and base_failed: + which = "both" + # x in data coords, y centered in the panel regardless of + # the y-range, so the label never clips at a panel edge. + ax.text( + i, + 0.5, + f"{which} FAIL", + transform=blended_transform_factory(ax.transData, ax.transAxes), + rotation=90, + ha="center", + va="center", + fontsize=7, + color=FAIL_EDGE, + zorder=3, + ) + elif value is None: + ax.text( + i, + 0.5, + "n/a", + transform=blended_transform_factory(ax.transData, ax.transAxes), + rotation=90, + ha="center", + va="center", + fontsize=7, + color=TEXT_SECONDARY, + zorder=3, + ) + else: + ax.bar( + i, + value, + width=0.66, + color=bar_color(value, kind, higher_is_better), + zorder=2, + ) + offset = 0.04 * span + ax.text( + i, + value + (offset if value >= 0 else -offset), + f"{value:+.1f}" if kind == "delta" else f"{value:.0f}", + ha="center", + va="bottom" if value >= 0 else "top", + fontsize=7, + color=TEXT_PRIMARY, + zorder=3, + ) + + ax.axhline(0, color=TEXT_SECONDARY, linewidth=0.8, zorder=2) + ax.set_title(title, fontsize=10, color=TEXT_PRIMARY, loc="left") + ax.set_ylabel(ylabel, fontsize=9, color=TEXT_SECONDARY) + ax.margins(y=0.18) + ax.grid(axis="y", color="#e5e4e0", linewidth=0.6, zorder=0) + ax.tick_params(colors=TEXT_SECONDARY, labelsize=8) + for spine in ax.spines.values(): + spine.set_visible(False) + + axes[-1].set_xticks(list(x)) + axes[-1].set_xticklabels(designs, rotation=45, ha="right", fontsize=8) + + fig.suptitle(args.title, fontsize=12, color=TEXT_PRIMARY) + handles = [ + plt.Rectangle((0, 0), 1, 1, color=BETTER), + plt.Rectangle((0, 0), 1, 1, color=WORSE), + plt.Rectangle((0, 0), 1, 1, color=NEUTRAL), + plt.Rectangle( + (0, 0), + 1, + 1, + facecolor=FAIL_FACE, + edgecolor=FAIL_EDGE, + hatch="//", + ), + ] + fig.legend( + handles, + [ + "SYN better", + "SYN worse", + f"within ±{NEUTRAL_BAND:g}% / absolute", + "synthesis failed", + ], + loc="upper right", + fontsize=8, + frameon=False, + ) + fig.tight_layout(rect=(0, 0, 1, 0.96)) + fig.savefig(args.output, facecolor=fig.get_facecolor()) + print(f"Wrote {args.output}") + + if args.runtime_output: + render_runtime_ab( + args.runtime_output, + "Synthesis runtime A/B: yosys vs OpenROAD-SYN (asap7)", + loaded, + ) + + +if __name__ == "__main__": + main() From 163df183d29716e3fcc12e0575669efe4e1ff978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 19:05:27 +0200 Subject: [PATCH 04/12] bazel: carry OpenROAD-SYN bazel-orfs support as git_override patches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four patches on the pinned BAZEL_ORFS_COMMIT, to be upstreamed once the status-suite churn settles: - 0001: SYNTH_USE_SYN engine selection in the synth stage rule; declare logs/1_synth.json in both engine modes (generate_metadata previously never saw synth__* metrics in bazel); orfs_test honors its cmd attr. - 0002: synthesis-only flows (last_stage="synth") get the same metadata/test/update_rules/update chain as full flows, gated on RULES_JSON — with FLOW_VARIANT=syn this selects rules-syn.json. - 0003: orfs_update copies only rules.json (cp of the stage's whole DefaultInfo broke bazelisk run _update for everyone). - 0004: orfs_design(extra=) caller hook so ORFS's config.mk DSL layer owns the OpenROAD-SYN status policy. Co-Authored-By: Claude Fable 5 Signed-off-by: Øyvind Harboe --- MODULE.bazel | 11 + ...enROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch | 302 ++++++++++++++++++ ...ta-test-update-chain-for-synthesis-o.patch | 71 ++++ ...-rules.json-in-the-orfs_update-scrip.patch | 34 ++ ...tension-hook-for-per-design-status-t.patch | 72 +++++ patches/bazel-orfs/BUILD.bazel | 9 + 6 files changed, 499 insertions(+) create mode 100644 patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch create mode 100644 patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch create mode 100644 patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch create mode 100644 patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch create mode 100644 patches/bazel-orfs/BUILD.bazel diff --git a/MODULE.bazel b/MODULE.bazel index f828679d3f..0b0fe85780 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -106,9 +106,20 @@ BAZEL_ORFS_COMMIT = "6ebadeb4be5c9ada103081c9a5e668c014126616" BAZEL_ORFS_REMOTE = "https://github.com/The-OpenROAD-Project/bazel-orfs.git" # To bump version, run: bazelisk run @bazel-orfs//:bump +# +# The patches carry OpenROAD-SYN support (SYNTH_USE_SYN engine selection, +# synthesis-only metadata/test chain, orfs_design extension hook) until +# they are upstreamed; see patches/bazel-orfs/BUILD.bazel. git_override( module_name = "bazel-orfs", commit = BAZEL_ORFS_COMMIT, + patch_strip = 1, + patches = [ + "//patches/bazel-orfs:0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch", + "//patches/bazel-orfs:0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch", + "//patches/bazel-orfs:0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch", + "//patches/bazel-orfs:0004-design-caller-extension-hook-for-per-design-status-t.patch", + ], remote = BAZEL_ORFS_REMOTE, ) diff --git a/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch b/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch new file mode 100644 index 0000000000..10e078e2a4 --- /dev/null +++ b/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch @@ -0,0 +1,302 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=98yvind=20Harboe?= +Date: Thu, 16 Jul 2026 16:14:51 +0200 +Subject: [PATCH 1/4] synth: support OpenROAD-SYN engine (SYNTH_USE_SYN=1) and + declare 1_synth.json + +SYNTH_USE_SYN=1 in the merged arguments switches the synthesis stage from +the yosys flow to OpenROAD's built-in synthesizer: a single do-1_synth +action (synth_syn.tcl) consuming the staged Verilog sources directly. +Yosys canonicalization outputs are stubbed (lint-mode precedent) so the +provider tail is engine-agnostic. Parallel/hierarchical yosys synthesis +vars are ignored in SYN mode, matching the Makefile. + +Also declare logs/1_synth.json (written by flow.sh's openroad -metrics) +in both engine modes and surface it via LoggingInfo.jsons: without it, +generate_metadata never saw any synth__* metrics and metadata-check +failed on rules-base.json's synth rules. + +orfs_test: honor the existing cmd attr instead of hardcoding +metadata-check. + +Co-Authored-By: Claude Fable 5 +--- + private/rules.bzl | 176 ++++++++++++++++++++++++++++++++++------------ + 1 file changed, 131 insertions(+), 45 deletions(-) + +diff --git a/private/rules.bzl b/private/rules.bzl +index 2c77c53..00925d4 100644 +--- a/private/rules.bzl ++++ b/private/rules.bzl +@@ -573,8 +573,9 @@ if [ ! -e external ]; then + # Needed as of Bazel >= 8 + ln -sf $(realpath $(pwd)/..) external + fi +-{make} --file {makefile} {moreargs} metadata-check ++{make} --file {makefile} {moreargs} {cmd} + """.format( ++ cmd = ctx.attr.cmd, + make = ctx.executable._make.short_path, + makefile = ctx.file._makefile.path, + moreargs = environment_string( +@@ -744,9 +745,14 @@ orfs_run_executable = rule( + + CANON_OUTPUT = "1_1_yosys_canonicalize.rtlil" + SYNTH_OUTPUTS = ["1_2_yosys.v", "1_2_yosys.sdc", "1_synth.sdc", "mem.json"] ++ ++# Outputs of the OpenROAD-SYN synthesis flow (SYNTH_USE_SYN=1). synth_syn.tcl ++# always writes the ODB, the canonicalized SDC and a gate-level Verilog ++# netlist (LEC input); none of the yosys-flow files exist in this mode. ++SYN_OUTPUTS = ["1_synth.odb", "1_synth.sdc", "1_synth.v"] + SYNTH_REPORTS = ["synth_stat.txt", "synth_mocked_memories.txt"] + +-def _yosys_parallel_synth(ctx, config, canon_output, synth_outputs, synth_logs, synth_reports, num_partitions, save_odb, all_arguments = {}): ++def _yosys_parallel_synth(ctx, config, canon_output, synth_outputs, synth_logs, synth_jsons, synth_reports, num_partitions, save_odb, all_arguments = {}): + """Parallel synthesis: keep → kept-json → N partitions → merge. + + Yosys is not deterministic when using host threads, so SYNTH_NUM_PARTITIONS +@@ -1101,7 +1107,12 @@ def _yosys_parallel_synth(ctx, config, canon_output, synth_outputs, synth_logs, + if save_odb: + odb_commands = [_make_cmd(ctx)] + generation_commands( + [synth_outputs["1_synth.odb"]], +- ) ++ ) + [ ++ # flow.sh writes logs/1_synth.json during do-1_synth; guarantee a ++ # parseable declared output either way (genMetrics json.load()s it). ++ "[ -s {p} ] || echo '{{}}' > {p}".format(p = f.path) ++ for f in synth_jsons ++ ] + ctx.actions.run_shell( + arguments = [ + "--file", +@@ -1123,7 +1134,7 @@ def _yosys_parallel_synth(ctx, config, canon_output, synth_outputs, synth_logs, + deps_inputs(ctx), + ], + ), +- outputs = [synth_outputs["1_synth.odb"], synth_outputs["1_synth.sdc"]], ++ outputs = [synth_outputs["1_synth.odb"], synth_outputs["1_synth.sdc"]] + synth_jsons, + tools = yosys_and_flow_tools, + ) + +@@ -1152,41 +1163,55 @@ def _yosys_impl(ctx): + ), + ) + ++ # Engine selection: SYNTH_USE_SYN=1 in the merged arguments switches the ++ # synthesis stage from the yosys flow to OpenROAD's built-in synthesizer ++ # (the Makefile's synth_syn path). Analysis-time only: the value must ++ # come through arguments/stage_arguments, not extra_arguments .json files. ++ use_syn = all_arguments.get("SYNTH_USE_SYN") == "1" ++ + canon_logs = declare_artifacts(ctx, "logs", ["1_1_yosys_canonicalize.log"]) + + canon_output = declare_artifact(ctx, "results", CANON_OUTPUT) + +- # SYNTH_NETLIST_FILES will not create an .rtlil file or reports, so we need +- # an empty placeholder in that case. +- commands = [_make_cmd(ctx)] + generation_commands( +- canon_logs + [canon_output], +- ) ++ if use_syn: ++ # OpenROAD-SYN has no yosys canonicalization; stub its outputs ++ # (lint-mode precedent) so the provider/deploy tail below is ++ # identical in both engine modes. genMetrics.py treats the empty ++ # RTLIL like a missing file when hashing. ++ for f in canon_logs + [canon_output]: ++ ctx.actions.write(output = f, content = "") ++ else: ++ # SYNTH_NETLIST_FILES will not create an .rtlil file or reports, so we need ++ # an empty placeholder in that case. ++ commands = [_make_cmd(ctx)] + generation_commands( ++ canon_logs + [canon_output], ++ ) + +- ctx.actions.run_shell( +- arguments = [ +- "--file", +- ctx.file._makefile_yosys.path, +- "yosys-dependencies", +- "do-yosys-canonicalize", +- ], +- command = EXPAND_VERILOG_DIRS + " && ".join(commands), +- env = config_overrides( +- ctx, +- verilog_arguments(ctx.files.verilog_files) | +- yosys_environment(ctx) | +- config_environment(config), +- ), +- inputs = depset( +- [config] + ctx.files.verilog_files + ctx.files.extra_configs, +- transitive = [ +- data_inputs(ctx), +- pdk_inputs(ctx), +- deps_inputs(ctx), ++ ctx.actions.run_shell( ++ arguments = [ ++ "--file", ++ ctx.file._makefile_yosys.path, ++ "yosys-dependencies", ++ "do-yosys-canonicalize", + ], +- ), +- outputs = [canon_output] + canon_logs, +- tools = yosys_inputs(ctx), +- ) ++ command = EXPAND_VERILOG_DIRS + " && ".join(commands), ++ env = config_overrides( ++ ctx, ++ verilog_arguments(ctx.files.verilog_files) | ++ yosys_environment(ctx) | ++ config_environment(config), ++ ), ++ inputs = depset( ++ [config] + ctx.files.verilog_files + ctx.files.extra_configs, ++ transitive = [ ++ data_inputs(ctx), ++ pdk_inputs(ctx), ++ deps_inputs(ctx), ++ ], ++ ), ++ outputs = [canon_output] + canon_logs, ++ tools = yosys_inputs(ctx), ++ ) + + num_partitions = int(all_arguments.get("SYNTH_NUM_PARTITIONS", "0")) + if num_partitions == 0 and all_arguments.get("SYNTH_KEEP_MODULES"): +@@ -1194,31 +1219,92 @@ def _yosys_impl(ctx): + # when NUM_CPUS-based auto-detection hasn't run (direct orfs_synth call). + kept_count = len(all_arguments["SYNTH_KEEP_MODULES"].split(" ")) + num_partitions = max(1, kept_count) ++ if use_syn: ++ # Parallel/hierarchical synthesis is a yosys-flow concept; the ++ # Makefile's SYNTH_USE_SYN path ignores SYNTH_KEEP_MODULES and ++ # SYNTH_NUM_PARTITIONS (e.g. asap7/swerv_wrapper carries both ++ # with SYNTH_USE_SYN=1), so never take the partitioned branch. ++ num_partitions = 0 + + save_odb = ctx.attr.save_odb +- +- synth_logs = declare_artifacts(ctx, "logs", ["1_2_yosys.log", "1_2_yosys_metrics.log"] + (["1_synth.log"] if save_odb else [])) +- +- synth_outputs = {} +- for output in SYNTH_OUTPUTS + (["1_synth.odb"] if save_odb else []): +- synth_outputs[output] = declare_artifact(ctx, "results", output) ++ if use_syn and not save_odb: ++ fail("SYNTH_USE_SYN=1 always writes 1_synth.odb; save_odb=False is " + ++ "not supported in " + str(ctx.label)) ++ ++ # logs/1_synth.json: metrics that flow.sh's `openroad -metrics` writes ++ # during do-1_synth. Declared so generate_metadata (which merges ++ # logs/1_*.json via genMetrics.py) sees the synth__* metrics. ++ if use_syn: ++ synth_logs = declare_artifacts(ctx, "logs", ["1_synth.log"]) ++ synth_jsons = declare_artifacts(ctx, "logs", ["1_synth.json"]) ++ synth_outputs = {o: declare_artifact(ctx, "results", o) for o in SYN_OUTPUTS} ++ else: ++ synth_logs = declare_artifacts(ctx, "logs", ["1_2_yosys.log", "1_2_yosys_metrics.log"] + (["1_synth.log"] if save_odb else [])) ++ synth_jsons = declare_artifacts(ctx, "logs", ["1_synth.json"] if save_odb else []) ++ synth_outputs = {} ++ for output in SYNTH_OUTPUTS + (["1_synth.odb"] if save_odb else []): ++ synth_outputs[output] = declare_artifact(ctx, "results", output) + + synth_reports = declare_artifacts(ctx, "reports", SYNTH_REPORTS) + + variables = declare_artifact(ctx, "results", "1_synth.vars") + ++ # Ensure declared metrics .json outputs exist and are parseable even if ++ # make did not write them; genMetrics.py json.load()s every 1_*.json, so ++ # the fallback must be "{}" rather than a touched empty file. ++ json_fallback = [ ++ "[ -s {p} ] || echo '{{}}' > {p}".format(p = f.path) ++ for f in synth_jsons ++ ] ++ + if ctx.attr.lint: + # Lint mode: only canonicalization runs; stub remaining synth outputs. + for f in synth_outputs.values() + synth_logs + synth_reports + [variables]: + ctx.actions.write(output = f, content = "") ++ for f in synth_jsons: ++ ctx.actions.write(output = f, content = "{}") ++ elif use_syn: ++ # OpenROAD-SYN synthesis: one openroad invocation (synth_syn.tcl via ++ # do-1_synth) consumes the staged Verilog sources directly, so ++ # VERILOG_FILES is set from ctx.files.verilog_files exactly like the ++ # yosys canonicalize action does. Uses the full flow makefile ++ # filegroup (synth_syn.tcl sources load.tcl etc.), no yosys tools. ++ commands = [_make_cmd(ctx)] + generation_commands( ++ synth_logs + synth_reports, ++ ) + json_fallback ++ ctx.actions.run_shell( ++ arguments = [ ++ "--file", ++ ctx.file._makefile.path, ++ "do-1_synth", ++ ], ++ command = EXPAND_VERILOG_DIRS + " && ".join(commands), ++ env = config_overrides( ++ ctx, ++ verilog_arguments(ctx.files.verilog_files) | ++ flow_environment(ctx) | ++ config_environment(config), ++ ), ++ inputs = depset( ++ [config] + ctx.files.verilog_files + ctx.files.extra_configs, ++ transitive = [ ++ data_inputs(ctx), ++ pdk_inputs(ctx), ++ deps_inputs(ctx), ++ ], ++ ), ++ outputs = synth_outputs.values() + synth_logs + synth_jsons + synth_reports, ++ tools = flow_inputs(ctx), ++ progress_message = "OpenROAD-SYN synthesis for %s" % module_top(ctx), ++ ) + elif num_partitions > 0: +- _yosys_parallel_synth(ctx, config, canon_output, synth_outputs, synth_logs, synth_reports, num_partitions, save_odb, all_arguments) ++ _yosys_parallel_synth(ctx, config, canon_output, synth_outputs, synth_logs, synth_jsons, synth_reports, num_partitions, save_odb, all_arguments) + else: + # SYNTH_NETLIST_FILES will not create an .rtlil file or reports, so we need + # an empty placeholder in that case. + commands = [_make_cmd(ctx)] + generation_commands( + synth_logs + synth_outputs.values() + synth_reports, +- ) ++ ) + json_fallback + ctx.actions.run_shell( + arguments = [ + "--file", +@@ -1242,7 +1328,7 @@ def _yosys_impl(ctx): + deps_inputs(ctx), + ], + ), +- outputs = synth_outputs.values() + synth_logs + synth_reports, ++ outputs = synth_outputs.values() + synth_logs + synth_jsons + synth_reports, + tools = depset(transitive = [yosys_inputs(ctx), flow_inputs(ctx)]), + ) + +@@ -1324,7 +1410,7 @@ def _yosys_impl(ctx): + exe, + config = config_short, + make = make, +- genfiles = [config_short] + outputs + canon_logs + synth_logs, ++ genfiles = [config_short] + outputs + canon_logs + synth_logs + synth_jsons, + ) + + # Collect all files needed for deployment (tools, PDK, stage inputs). +@@ -1364,7 +1450,7 @@ def _yosys_impl(ctx): + name = ctx.attr.name + "_deps", + ) + +- _runfiles_files = [config_short, make] + outputs + canon_logs + synth_logs + ctx.files.extra_configs ++ _runfiles_files = [config_short, make] + outputs + canon_logs + synth_logs + synth_jsons + ctx.files.extra_configs + _runfiles_common = depset( + transitive = [ + deps_inputs(ctx), +@@ -1444,7 +1530,7 @@ def _yosys_impl(ctx): + logs = depset(canon_logs + synth_logs), + reports = depset(synth_reports), + drcs = depset([]), +- jsons = depset([]), ++ jsons = depset(synth_jsons), + ), + ] + diff --git a/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch b/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch new file mode 100644 index 0000000000..9e1052f44d --- /dev/null +++ b/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch @@ -0,0 +1,71 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=98yvind=20Harboe?= +Date: Thu, 16 Jul 2026 16:16:38 +0200 +Subject: [PATCH 2/4] flow: emit metadata/test/update chain for synthesis-only + flows + +When last_stage="synth", orfs_flow() now emits the same +generate_metadata -> test -> update_rules -> update target chain as the +full flow, fed directly from the synth stage and gated on RULES_JSON. +With FLOW_VARIANT-scoped rules (rules-.json) this enables +synthesis-only QoR gates such as rules-syn.json for the OpenROAD-SYN +status suite. + +Co-Authored-By: Claude Fable 5 +--- + private/flow.bzl | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/private/flow.bzl b/private/flow.bzl +index aa8f3e3..0cedbe0 100644 +--- a/private/flow.bzl ++++ b/private/flow.bzl +@@ -829,3 +829,48 @@ def _orfs_pass( + logs = [rules_name], + **_strip_tool_kwargs(**update_kwargs) + ) ++ elif steps[-1].stage == "synth" and start_stage <= 1 and not mock_area: ++ # Synthesis-only flow (last_stage = "synth"): emit the same ++ # metadata → test → update_rules → update chain as the full flow, ++ # fed straight from the synth stage. genMetrics.py tolerates a ++ # synthesis-only tree (no 2_floorplan.sdc, no stage 2..6 logs). ++ # Gated on RULES_JSON like the full-flow test: without rules ++ # there is nothing for metadata-check to check. ++ test_args = get_stage_args( ++ TEST_STAGE_IMPL.stage, ++ stage_arguments, ++ arguments, ++ sources, ++ ) ++ if "RULES_JSON" in test_args: ++ do_step( ++ GENERATE_METADATA_STAGE_IMPL, ++ steps[-1], ++ data = [ ++ # Stage synth's logs (1_synth.log, 1_synth.json) via ++ # data_runfiles; source_inputs deliberately omits ++ # LoggingInfo.logs, and genMetrics.py reads both. ++ _step_name(name, variant, "synth"), ++ ], ++ kwargs = kwargs, ++ ) ++ do_step( ++ TEST_STAGE_IMPL, ++ GENERATE_METADATA_STAGE_IMPL, ++ kwargs = kwargs | {"tags": []} | test_kwargs, ++ ) ++ rules_name = do_step( ++ UPDATE_RULES_IMPL, ++ GENERATE_METADATA_STAGE_IMPL, ++ kwargs = kwargs, ++ more_kwargs = kwargs, ++ ) ++ update_kwargs = dict(kwargs) ++ update_kwargs.pop("substeps", None) ++ update_kwargs.pop("lint", None) ++ orfs_update( ++ name = _step_name(name, variant, "update"), ++ rules_json = sources["RULES_JSON"][0], ++ logs = [rules_name], ++ **_strip_tool_kwargs(**update_kwargs) ++ ) diff --git a/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch b/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch new file mode 100644 index 0000000000..fa3b2b9c55 --- /dev/null +++ b/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch @@ -0,0 +1,34 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=98yvind=20Harboe?= +Date: Thu, 16 Jul 2026 16:35:57 +0200 +Subject: [PATCH 3/4] update: copy only rules.json in the orfs_update script + +The update_rules stage's DefaultInfo carries update_rules.args.mk next +to rules.json, so the generated cp had two sources and a file target: +'cp: target ...rules-base.json: Not a directory'. Filter to rules.json. + +Co-Authored-By: Claude Fable 5 +--- + private/flow.bzl | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/private/flow.bzl b/private/flow.bzl +index 0cedbe0..c071af8 100644 +--- a/private/flow.bzl ++++ b/private/flow.bzl +@@ -406,7 +406,14 @@ logs="{logs}" + cp $logs $BUILD_WORKSPACE_DIRECTORY/$rules_json + """.format( + rules_json = ctx.file.rules_json.path, +- logs = " ".join([log.short_path for log in ctx.files.logs]), ++ # The update_rules stage's DefaultInfo carries rules.json plus ++ # bookkeeping files (update_rules.args.mk); only rules.json may ++ # be copied — cp with several sources needs a directory target. ++ logs = " ".join([ ++ log.short_path ++ for log in ctx.files.logs ++ if log.basename == "rules.json" ++ ]), + ), + ) + diff --git a/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch b/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch new file mode 100644 index 0000000000..f6660dc742 --- /dev/null +++ b/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch @@ -0,0 +1,72 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=98yvind=20Harboe?= +Date: Thu, 16 Jul 2026 16:23:49 +0200 +Subject: [PATCH 4/4] design: caller extension hook for per-design status + targets +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +orfs_design(extra = ) invokes the callable with the fully +processed design data (labels converted, local/user arguments routed) so +consumers can attach additional per-design targets — e.g. ORFS's +OpenROAD-SYN status flows (a forced-SYNTH_USE_SYN synthesis-only variant +plus best-effort QoR reporting) — without orfs_design knowing their +policy. + +Co-Authored-By: Claude Fable 5 +--- + private/orfs_design.bzl | 26 +++++++++++++++++++++++++- + 1 file changed, 25 insertions(+), 1 deletion(-) + +diff --git a/private/orfs_design.bzl b/private/orfs_design.bzl +index c663be0..e85b80b 100644 +--- a/private/orfs_design.bzl ++++ b/private/orfs_design.bzl +@@ -51,7 +51,7 @@ def _convert_sources(sources, pkg): + result[var] = converted + return result + +-def orfs_design(name = None, config = "config.mk", platform = None, design = None, designs = None, mock_openroad = None, mock_yosys = None, user_arguments = [], user_sources = [], local_arguments = [], blender = False): # buildifier: disable=unused-variable ++def orfs_design(name = None, config = "config.mk", platform = None, design = None, designs = None, mock_openroad = None, mock_yosys = None, user_arguments = [], user_sources = [], local_arguments = [], blender = False, extra = None): # buildifier: disable=unused-variable + """Create orfs_flow() targets for a design based on its parsed config.mk. + + Usage: +@@ -101,6 +101,12 @@ def orfs_design(name = None, config = "config.mk", platform = None, design = Non + have no BlenderGDS stackup (see blender_supports_pdk in + private/blender.bzl), so callers can flip this on globally + without having to enumerate supported PDKs. ++ extra: optional callable invoked after the real flow with the ++ fully-processed design data (name, platform, verilog_files, ++ arguments, user_arguments, sources, user_sources, macros, ++ stage_data, tags) so callers can attach additional ++ per-design targets (extra flow variants, reporting targets) ++ without orfs_design knowing their policy. + """ + if designs == None: + fail("orfs_design() requires designs: load orfs_design from @orfs_designs//:designs.bzl") +@@ -245,6 +251,24 @@ def orfs_design(name = None, config = "config.mk", platform = None, design = Non + blender = blender and blender_supports_pdk("//flow:" + platform), + ) + ++ # Caller extension hook: invoked with the fully-processed design data ++ # (labels converted, local/user arguments routed) so consumers can ++ # attach additional per-design targets — e.g. ORFS's OpenROAD-SYN ++ # status flows — without teaching orfs_design about their policy. ++ if extra: ++ extra( ++ name = name, ++ platform = platform, ++ verilog_files = verilog_files, ++ arguments = arguments, ++ user_arguments = user_args, ++ sources = sources, ++ user_sources = user_srcs, ++ macros = macros if macros else [], ++ stage_data = {"synth": extra_data} if extra_data else {}, ++ tags = tags, ++ ) ++ + # Lint flow — fast validation with mock-openroad (only if configured) + if mock_openroad: + lint_kwargs = dict( diff --git a/patches/bazel-orfs/BUILD.bazel b/patches/bazel-orfs/BUILD.bazel new file mode 100644 index 0000000000..ae485d0fa4 --- /dev/null +++ b/patches/bazel-orfs/BUILD.bazel @@ -0,0 +1,9 @@ +"""OpenROAD-SYN support carried as git_override patches on bazel-orfs. + +Applied on top of the pinned BAZEL_ORFS_COMMIT (see MODULE.bazel). To be +upstreamed to The-OpenROAD-Project/bazel-orfs once the OpenROAD-SYN +status-suite churn settles; regenerate with git format-patch from a +branch based on the pinned commit. +""" + +exports_files(glob(["*.patch"])) From 238be8b3c0e2012f349e373320bccda0a4eb8d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 19:05:27 +0200 Subject: [PATCH 05/12] designs: OpenROAD-SYN status targets in the config.mk DSL (asap7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every design now gets manual OpenROAD-SYN status targets via the orfs_design extra hook (flow/designs/design.bzl): a synthesis-only variant "syn" flow with SYNTH_USE_SYN=1 forced (_syn_synth, and with a rules-syn.json also _syn_test / _syn_update) plus a best-effort _syn_qor / _yosys_qor pair (flow/designs/qor.bzl) that always builds, emitting metadata or a failure marker for the QoR comparison graph. flow/designs/asap7/BUILD aggregates them: bazelisk test //flow/designs/asap7:syn_test (17 designs, failing ones included — it is a status suite) and the graph genrules syn_qor_png / clock_period_png. ibex is excluded as a documented runaway: its OpenROAD-SYN synthesis completes but report_metrics STA spins for hours. gcd's SYNTH_USE_SYN local_arguments workaround is gone — the DSL now routes the variable natively, so gcd's regular flow uses OpenROAD-SYN like make does. The single-process comparison keeps a dedicated yosys-engine flow variant since single_flow.tcl seeds from the yosys netlist. Co-Authored-By: Claude Fable 5 Signed-off-by: Øyvind Harboe --- flow/designs/asap7/BUILD | 139 ++++++++++++++++++++++++++ flow/designs/asap7/gcd/BUILD | 34 +++++-- flow/designs/design.bzl | 66 ++++++++++++- flow/designs/qor.bzl | 184 +++++++++++++++++++++++++++++++++++ 4 files changed, 413 insertions(+), 10 deletions(-) create mode 100644 flow/designs/asap7/BUILD create mode 100644 flow/designs/qor.bzl diff --git a/flow/designs/asap7/BUILD b/flow/designs/asap7/BUILD new file mode 100644 index 0000000000..36990a7573 --- /dev/null +++ b/flow/designs/asap7/BUILD @@ -0,0 +1,139 @@ +# OpenROAD-SYN status suite for asap7. +# +# Every asap7 design gets manual _syn_* targets from the config.mk +# DSL (see flow/designs/design.bzl): a synthesis-only variant "syn" flow +# with SYNTH_USE_SYN=1 forced, a rules-syn.json QoR gate, and a +# best-effort _syn_qor / _yosys_qor pair for the comparison +# graph. This package aggregates them: +# +# bazelisk test //flow/designs/asap7:syn_test +# bazelisk build //flow/designs/asap7:syn_qor_png +# +# The suite deliberately includes designs that fail OpenROAD-SYN today — +# it is a status report, not a green-only gate. Failing designs keep a +# stub rules-syn.json (fails honestly at the synth stage); passing +# designs get real rules via bazelisk run :_syn_update. + +# Design directory -> DESIGN_NAME (bazel target prefix), ordered +# fastest-first so --keep_going runs surface quick failures early. +# Expected failures / quirks are listed last. "minimal" is excluded: it +# has no VERILOG_FILES and thus no generated design targets. +SYN_TEST_DESIGNS = { + "gcd": "gcd", # smoketest, fast + "uart": "uart", + "mock-alu": "MockAlu", + "riscv32i": "riscv_top", + "aes": "aes_cipher_top", + "aes_lvt": "aes_cipher_top", + "aes-mbff": "aes_cipher_top", + "jpeg": "jpeg_encoder", + "jpeg_lvt": "jpeg_encoder", + "ethmac": "ethmac", + "ethmac_lvt": "ethmac", + "mock-cpu": "mock_cpu", + "swerv_wrapper": "swerv_wrapper", # large; SRAM macros + "cva6": "cva6", # large; slang include dirs/defines + "gcd-ccs": "gcd", # CCS liberty + "aes-block": "aes_cipher_top", # hierarchical BLOCKS + "riscv32i-mock-sram": "riscv_top", # hierarchical BLOCKS (fakeram) +} + +# Designs whose OpenROAD-SYN run does not terminate in reasonable time. +# Deliberately excluded from syn_test and the QoR graph so the +# aggregators stay runnable; their manual per-design targets remain +# available to reproduce the problem, e.g. +# bazelisk build //flow/designs/asap7/ibex:ibex_core_syn_synth +# +# - ibex: sv_elaborate/synthesize/repair_design complete in seconds, but +# report_metrics ("Report metrics stage 1, synth...") spins in STA for +# hours (observed >2h on 48 threads with no progress). +SYN_RUNAWAY_DESIGNS = { + "ibex": "ibex_core", +} + +# Explicitly listed manual tests DO run through a test_suite (the manual +# tag only exempts them from wildcard expansion); the suite itself is +# manual so `bazelisk test //flow/...` does not pull them in either. +test_suite( + name = "syn_test", + tags = ["manual"], + tests = [ + "//flow/designs/asap7/{pkg}:{name}_syn_test".format( + name = name, + pkg = pkg, + ) + for pkg, name in SYN_TEST_DESIGNS.items() + ], +) + +# The syn-vs-yosys QoR comparison graph plus the runtime A/B chart. A +# plain build target: the per-design _qor inputs are best-effort (marker +# JSON on failure), so this always builds and failing designs render as +# hatched FAIL columns. +# +# Refresh the checked-in copies embedded by the status PR with: +# bazelisk build //flow/designs/asap7:syn_qor_png +# cp -f bazel-bin/flow/designs/asap7/openroad-syn-{qor,runtime}.png \ +# flow/docs/images/ +# Effective clock period (target - gated worst slack) across stages, +# one series per design, OpenROAD-SYN synthesis point overlaid. Consumes +# only the checked-in rules-*.json files — no flow runs. Same refresh +# pattern as syn_qor_png, into flow/docs/images/openroad-syn-clock-period.png. +genrule( + name = "clock_period_png", + srcs = [ + "//flow/designs/asap7/{pkg}:rules-{kind}.json".format( + kind = kind, + pkg = pkg, + ) + for pkg in SYN_TEST_DESIGNS + for kind in [ + "base", + "syn", + ] + ], + outs = ["openroad-syn-clock-period.png"], + cmd = "$(location //flow/util:plotClockPeriod) --output $@ " + " ".join([ + ("--design {pkg} " + + "--rules-base $(location //flow/designs/asap7/{pkg}:rules-base.json) " + + "--rules-syn $(location //flow/designs/asap7/{pkg}:rules-syn.json)").format( + pkg = pkg, + ) + for pkg in SYN_TEST_DESIGNS + ]), + tags = ["manual"], + tools = ["//flow/util:plotClockPeriod"], +) + +genrule( + name = "syn_qor_png", + srcs = [ + "//flow/designs/asap7/{pkg}:{name}_{kind}_qor".format( + name = name, + kind = kind, + pkg = pkg, + ) + for pkg, name in SYN_TEST_DESIGNS.items() + for kind in [ + "syn", + "yosys", + ] + ], + outs = [ + "openroad-syn-qor.png", + "openroad-syn-runtime.png", + ], + cmd = "$(location //flow/util:plotSynQoR) " + + "--output $(location openroad-syn-qor.png) " + + "--runtime-output $(location openroad-syn-runtime.png) " + " ".join([ + ("--design {pkg} " + + "--syn $(location //flow/designs/asap7/{pkg}:{name}_syn_qor) " + + "--base $(location //flow/designs/asap7/{pkg}:{name}_yosys_qor)").format( + name = name, + pkg = pkg, + ) + for pkg, name in SYN_TEST_DESIGNS.items() + ]), + tags = ["manual"], + tools = ["//flow/util:plotSynQoR"], +) diff --git a/flow/designs/asap7/gcd/BUILD b/flow/designs/asap7/gcd/BUILD index b8c3ddc518..7d1d5a2843 100644 --- a/flow/designs/asap7/gcd/BUILD +++ b/flow/designs/asap7/gcd/BUILD @@ -1,15 +1,29 @@ -load("@bazel-orfs//:openroad.bzl", "orfs_run") +load("@bazel-orfs//:openroad.bzl", "orfs_flow", "orfs_run") load("@orfs_designs//:designs.bzl", "DESIGNS") load("@rules_shell//shell:sh_test.bzl", "sh_test") load("//flow/designs:design.bzl", "design") -# SYNTH_USE_SYN is make-only for now: bazel-orfs's synth stage always -# runs the yosys flow and neither stages the Verilog sources nor sets -# VERILOG_FILES for the OpenROAD synthesis step, so the built-in -# synthesizer opt-in must not reach the bazel arguments. design( config = "config.mk", - local_arguments = ["SYNTH_USE_SYN"], +) + +# gcd's regular flow follows config.mk onto OpenROAD-SYN +# (SYNTH_USE_SYN=1), but the single-process comparison below +# deliberately exercises the yosys netlist path (single_flow.tcl seeds +# from 1_2_yosys.v). Give the comparison its own yosys-engine flow; +# manual so only the gcd_single_flow_test suite builds it. +orfs_flow( + name = "gcd", + arguments = { + k: v + for k, v in DESIGNS["asap7/gcd"]["arguments"].items() + if k != "SYNTH_USE_SYN" + }, + pdk = "//flow:asap7", + sources = DESIGNS["asap7/gcd"]["sources"], + tags = ["manual"], + variant = "yosys", + verilog_files = DESIGNS["asap7/gcd"]["verilog_files"], ) # Stage-boundary .odb/.sdc stems shared by the normal per-stage flow @@ -56,7 +70,7 @@ SINGLE_FLOW_EXTRA_OUTS = [ # this package. orfs_run( name = "gcd_single_flow", - src = ":gcd_synth", + src = ":gcd_yosys_synth", outs = [ "results/asap7/gcd/single/{}.{}".format(stem, ext) for stem in SINGLE_FLOW_STAGES.values() @@ -79,11 +93,13 @@ orfs_run( variant = "single", ) -# Normal-flow stage outputs, one filegroup per compared file. +# Normal-flow stage outputs, one filegroup per compared file. Taken from +# the yosys-engine variant above so both sides of the byte-compare start +# from the same yosys netlist. [ filegroup( name = "gcd_base_{}_{}".format(stage, ext), - srcs = [":gcd_" + stage], + srcs = [":gcd_yosys_" + stage], output_group = "{}.{}".format(stem, ext), ) for stage, stem in SINGLE_FLOW_STAGES.items() diff --git a/flow/designs/design.bzl b/flow/designs/design.bzl index b4efc0b1d0..6b6295db4f 100644 --- a/flow/designs/design.bzl +++ b/flow/designs/design.bzl @@ -1,6 +1,8 @@ """BUILD boilerplate for flow/designs/.""" +load("@bazel-orfs//:openroad.bzl", "orfs_flow") load("@orfs_designs//:designs.bzl", "orfs_design") +load("//flow/designs:qor.bzl", "orfs_qor") # Per filegroup target: extensions included in the filegroup. # bazel-orfs's config_mk_parser produces these target names from @@ -17,7 +19,9 @@ _GROUPS = { # cross-package references resolve. Kept tight on purpose: globbing "*" # silently exposes LICENSE/.gitignore/etc. as the public API surface. # gds/gds.gz are inputs in hierarchical flows via ADDITIONAL_GDS. -_EXPORTED_EXTS = ["v", "sv", "svh", "tcl", "sdc", "def", "cfg", "lef", "lib", "gds", "gds.gz"] +# json covers rules-*.json so QoR reporting targets (e.g. +# //flow/designs/asap7:clock_period_png) can consume them per file. +_EXPORTED_EXTS = ["v", "sv", "svh", "tcl", "sdc", "def", "cfg", "lef", "lib", "gds", "gds.gz", "json"] _EXPORTS_SENTINEL = "_orfs_design_exports_sentinel" @@ -51,6 +55,65 @@ def _export_design_files(): visibility = ["//visibility:private"], ) +def _syn_status_targets( + name, + platform, + verilog_files, + arguments, + user_arguments, + sources, + user_sources, + macros, + stage_data, + tags): # buildifier: disable=unused-variable + """OpenROAD-SYN status targets for one design (orfs_design extra hook). + + Emits, always tagged "manual" (even for CI designs, so only explicit + invocations such as //flow/designs/asap7:syn_test run them): + + - a synthesis-only variant "syn" flow with SYNTH_USE_SYN=1 forced, + regardless of the config.mk default: _syn_synth plus — when + the package has a rules-syn.json — the _syn_test QoR gate + and _syn_update rules regenerator. + - a best-effort _syn_qor / _yosys_qor pair whose + qor.json outputs feed the syn-vs-yosys QoR comparison graph. + """ + syn_sources = {k: v for k, v in sources.items() if k != "RULES_JSON"} + if native.glob(["rules-syn.json"], allow_empty = True): + syn_sources["RULES_JSON"] = [":rules-syn.json"] + orfs_flow( + name = name, + verilog_files = verilog_files, + pdk = "//flow:" + platform, + arguments = arguments | {"SYNTH_USE_SYN": "1"}, + user_arguments = user_arguments, + sources = syn_sources, + user_sources = user_sources, + macros = macros, + stage_data = stage_data, + variant = "syn", + last_stage = "synth", + tags = ["manual"], + test_kwargs = {"tags": ["manual"]}, + ) + for qor_variant, qor_use_syn in [("syn_qor", True), ("yosys_qor", False)]: + orfs_qor( + name = "%s_%s" % (name, qor_variant), + use_syn = qor_use_syn, + module_top = name, + variant = qor_variant, + verilog_files = verilog_files, + pdk = "//flow:" + platform, + # user_arguments are dropped by the synth-stage argument + # filter; designs whose synthesis depends on user .tcl hooks + # may fail their best-effort QoR run and render as FAILED. + arguments = arguments, + sources = {k: v for k, v in sources.items() if k != "RULES_JSON"}, + deps = macros, + stage_data = stage_data, + tags = ["manual"], + ) + def design(config = "config.mk", user_arguments = [], user_sources = [], local_arguments = []): """Standard BUILD body for flow/designs///. @@ -75,6 +138,7 @@ def design(config = "config.mk", user_arguments = [], user_sources = [], local_a user_sources = user_sources, local_arguments = local_arguments, blender = True, + extra = _syn_status_targets, ) def files(group, extra_srcs = None): diff --git a/flow/designs/qor.bzl b/flow/designs/qor.bzl new file mode 100644 index 0000000000..b8a3aa8c54 --- /dev/null +++ b/flow/designs/qor.bzl @@ -0,0 +1,184 @@ +"""Best-effort synthesis QoR targets for the OpenROAD-SYN status report. + +orfs_qor() runs synthesis (yosys or OpenROAD-SYN, chosen per target) plus +metadata-generate in one action and always produces a single qor.json: a +copy of the synthesis-only metadata.json on success, or a small failure +marker {"orfs_qor_failed": true, ...} when any step fails. This lets the +aggregating QoR comparison graph (//flow/designs/asap7:syn_qor_png) be a +plain `bazel build` target that renders failing designs instead of +refusing to build. The strict per-design _syn_test targets are +unaffected — only the QoR reporting pipeline is best-effort. + +This is ORFS status-suite policy layered on bazel-orfs plumbing, so it +lives here (loading bazel-orfs's helper .bzls) rather than in bazel-orfs. +""" + +load( + "@bazel-orfs//private:attrs.bzl", + "synth_attrs", + "yosys_attrs", +) +load( + "@bazel-orfs//private:environment.bzl", + "EXPAND_VERILOG_DIRS", + "config_content", + "config_environment", + "config_overrides", + "data_arguments", + "data_inputs", + "declare_artifact", + "deps_inputs", + "flow_environment", + "flow_inputs", + "merge_arguments", + "module_top", + "orfs_additional_arguments", + "pdk_inputs", + "required_arguments", + "verilog_arguments", + "yosys_environment", + "yosys_inputs", +) +load( + "@bazel-orfs//private:providers.bzl", + "OrfsInfo", +) +load( + "@bazel-orfs//private:stages.bzl", + "get_sources", + "get_stage_args", +) + +def _qor_impl(ctx): + all_arguments = merge_arguments( + data_arguments(ctx) | + required_arguments(ctx), + orfs_additional_arguments( + [dep[OrfsInfo] for dep in ctx.attr.deps], + use_pre_layout = True, + ), + ) + use_syn = all_arguments.get("SYNTH_USE_SYN") == "1" + + config = declare_artifact(ctx, "results", "1_synth.mk") + ctx.actions.write( + output = config, + content = config_content( + ctx, + all_arguments, + [file.path for file in ctx.files.extra_configs], + ), + ) + + qor = declare_artifact(ctx, "reports", "qor.json") + + if use_syn: + targets = ["do-1_synth", "metadata-generate"] + else: + targets = [ + "yosys-dependencies", + "do-yosys-canonicalize", + "do-yosys", + "do-1_synth", + "metadata-generate", + ] + + marker = json.encode({ + "design": module_top(ctx), + "orfs_qor_failed": True, + "variant": ctx.attr.variant, + }) + + ctx.actions.run_shell( + arguments = ["--file", ctx.file._makefile.path] + targets, + command = EXPAND_VERILOG_DIRS + """ +if {make} "$@"; then + cp "$(dirname {qor})/metadata.json" {qor} +else + echo '{marker}' > {qor} +fi +""".format( + make = ctx.executable._make.path, + marker = marker, + qor = qor.path, + ), + env = config_overrides( + ctx, + verilog_arguments(ctx.files.verilog_files) | + flow_environment(ctx) | + yosys_environment(ctx) | + config_environment(config), + ), + inputs = depset( + [config] + ctx.files.verilog_files + ctx.files.extra_configs, + transitive = [ + data_inputs(ctx), + pdk_inputs(ctx), + deps_inputs(ctx), + ], + ), + outputs = [qor], + tools = depset(transitive = [yosys_inputs(ctx), flow_inputs(ctx)]), + progress_message = "Best-effort synthesis QoR for %s (%s)" % ( + module_top(ctx), + ctx.attr.variant, + ), + ) + + return [DefaultInfo(files = depset([qor]))] + +_orfs_qor_rule = rule( + implementation = _qor_impl, + attrs = yosys_attrs() | + synth_attrs() | + { + "_stage": attr.string( + default = "synth", + ), + }, +) + +def orfs_qor( + name, + use_syn, + module_top, + variant, + verilog_files, + pdk, + arguments = {}, + sources = {}, + deps = [], + stage_data = {}, + **kwargs): + """Best-effort synthesis QoR target that always builds. + + Args: + name: target name (convention: _syn_qor / _yosys_qor). + use_syn: True runs OpenROAD-SYN (SYNTH_USE_SYN=1), False forces the + yosys flow — regardless of what the design's arguments say. + module_top: Verilog top module name. + variant: FLOW_VARIANT; must be distinct from any orfs_flow() variant + in the same package so declared output paths do not collide. + verilog_files: design sources. + pdk: PDK label. + arguments: config.mk argument dict (synth-stage vars are selected). + sources: config.mk source-label dict (routed to the data attr). + deps: macro abstracts. + stage_data: dict keyed by stage with extra data labels. + **kwargs: forwarded to the rule (e.g. tags, visibility). + """ + _orfs_qor_rule( + name = name, + module_top = module_top, + variant = variant, + verilog_files = verilog_files, + pdk = pdk, + deps = deps, + arguments = get_stage_args( + "synth", + arguments = arguments | {"SYNTH_USE_SYN": "1" if use_syn else "0"}, + sources = sources, + ), + data = get_sources("synth", {}, sources) + stage_data.get("synth", []), + **kwargs + ) From d28310aaa1984de2c74a317ed642bf2413b41b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 19:16:57 +0200 Subject: [PATCH 06/12] designs/asap7: rules-syn.json QoR gates for OpenROAD-SYN synthesis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Real gates (from _syn_update runs: std-cell area/count with padding, period-padded setup WS/TNS, clock count and period, warning- level netlist hashes) for the 11 designs whose OpenROAD-SYN synthesis passes: gcd, uart, aes, aes_lvt, aes-mbff, aes-block, jpeg, jpeg_lvt, ethmac, ethmac_lvt, gcd-ccs. Minimal stubs (instance count > 0) for designs that fail today, so their _syn_test targets exist and fail honestly at the synth stage: mock-alu (SDC references yosys-style register names), riscv32i (slang rejects procedural assignment to nets), mock-cpu (slang rejects endianness-mismatched part-select), and the slow/excluded set (ibex, cva6, swerv_wrapper, riscv32i-mock-sram). Co-Authored-By: Claude Fable 5 Signed-off-by: Øyvind Harboe --- flow/designs/asap7/aes-block/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/aes-mbff/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/aes/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/aes_lvt/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/cva6/rules-syn.json | 6 ++++ flow/designs/asap7/ethmac/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/ethmac_lvt/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/gcd-ccs/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/gcd/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/ibex/rules-syn.json | 6 ++++ flow/designs/asap7/jpeg/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/jpeg_lvt/rules-syn.json | 36 +++++++++++++++++++ flow/designs/asap7/mock-alu/rules-syn.json | 6 ++++ flow/designs/asap7/mock-cpu/rules-syn.json | 6 ++++ .../asap7/riscv32i-mock-sram/rules-syn.json | 6 ++++ flow/designs/asap7/riscv32i/rules-syn.json | 6 ++++ .../asap7/swerv_wrapper/rules-syn.json | 6 ++++ flow/designs/asap7/uart/rules-syn.json | 36 +++++++++++++++++++ 18 files changed, 438 insertions(+) create mode 100644 flow/designs/asap7/aes-block/rules-syn.json create mode 100644 flow/designs/asap7/aes-mbff/rules-syn.json create mode 100644 flow/designs/asap7/aes/rules-syn.json create mode 100644 flow/designs/asap7/aes_lvt/rules-syn.json create mode 100644 flow/designs/asap7/cva6/rules-syn.json create mode 100644 flow/designs/asap7/ethmac/rules-syn.json create mode 100644 flow/designs/asap7/ethmac_lvt/rules-syn.json create mode 100644 flow/designs/asap7/gcd-ccs/rules-syn.json create mode 100644 flow/designs/asap7/gcd/rules-syn.json create mode 100644 flow/designs/asap7/ibex/rules-syn.json create mode 100644 flow/designs/asap7/jpeg/rules-syn.json create mode 100644 flow/designs/asap7/jpeg_lvt/rules-syn.json create mode 100644 flow/designs/asap7/mock-alu/rules-syn.json create mode 100644 flow/designs/asap7/mock-cpu/rules-syn.json create mode 100644 flow/designs/asap7/riscv32i-mock-sram/rules-syn.json create mode 100644 flow/designs/asap7/riscv32i/rules-syn.json create mode 100644 flow/designs/asap7/swerv_wrapper/rules-syn.json create mode 100644 flow/designs/asap7/uart/rules-syn.json diff --git a/flow/designs/asap7/aes-block/rules-syn.json b/flow/designs/asap7/aes-block/rules-syn.json new file mode 100644 index 0000000000..6677f6b0e4 --- /dev/null +++ b/flow/designs/asap7/aes-block/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 1620.0, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 12862, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -22.5, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -90.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 1, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 450.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/aes-mbff/rules-syn.json b/flow/designs/asap7/aes-mbff/rules-syn.json new file mode 100644 index 0000000000..ed8b02ad48 --- /dev/null +++ b/flow/designs/asap7/aes-mbff/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 1620.0, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 12862, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -82.6, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -3530.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 2, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 380.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/aes/rules-syn.json b/flow/designs/asap7/aes/rules-syn.json new file mode 100644 index 0000000000..ed8b02ad48 --- /dev/null +++ b/flow/designs/asap7/aes/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 1620.0, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 12862, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -82.6, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -3530.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 2, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 380.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/aes_lvt/rules-syn.json b/flow/designs/asap7/aes_lvt/rules-syn.json new file mode 100644 index 0000000000..f738b07c14 --- /dev/null +++ b/flow/designs/asap7/aes_lvt/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 1620.0, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 12844, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -21.0, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -75.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 1, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 360.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/cva6/rules-syn.json b/flow/designs/asap7/cva6/rules-syn.json new file mode 100644 index 0000000000..693b236889 --- /dev/null +++ b/flow/designs/asap7/cva6/rules-syn.json @@ -0,0 +1,6 @@ +{ + "synth__design__instance__count__stdcell": { + "value": 0, + "compare": ">" + } +} diff --git a/flow/designs/asap7/ethmac/rules-syn.json b/flow/designs/asap7/ethmac/rules-syn.json new file mode 100644 index 0000000000..a70b9019a1 --- /dev/null +++ b/flow/designs/asap7/ethmac/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 8650.0, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 60231, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -157.0, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -7180.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 6, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 300.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/ethmac_lvt/rules-syn.json b/flow/designs/asap7/ethmac_lvt/rules-syn.json new file mode 100644 index 0000000000..9cf9c612c9 --- /dev/null +++ b/flow/designs/asap7/ethmac_lvt/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 8700.0, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 57000, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -87.4, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -2630.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 6, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 300.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/gcd-ccs/rules-syn.json b/flow/designs/asap7/gcd-ccs/rules-syn.json new file mode 100644 index 0000000000..4a69b2efa4 --- /dev/null +++ b/flow/designs/asap7/gcd-ccs/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 46.7, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 352, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -81.0, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -559.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 2, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 310.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/gcd/rules-syn.json b/flow/designs/asap7/gcd/rules-syn.json new file mode 100644 index 0000000000..4a69b2efa4 --- /dev/null +++ b/flow/designs/asap7/gcd/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 46.7, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 352, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -81.0, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -559.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 2, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 310.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/ibex/rules-syn.json b/flow/designs/asap7/ibex/rules-syn.json new file mode 100644 index 0000000000..693b236889 --- /dev/null +++ b/flow/designs/asap7/ibex/rules-syn.json @@ -0,0 +1,6 @@ +{ + "synth__design__instance__count__stdcell": { + "value": 0, + "compare": ">" + } +} diff --git a/flow/designs/asap7/jpeg/rules-syn.json b/flow/designs/asap7/jpeg/rules-syn.json new file mode 100644 index 0000000000..4c74fd9c20 --- /dev/null +++ b/flow/designs/asap7/jpeg/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 7710.0, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 59325, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -34.0, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -136.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 1, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 680.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/jpeg_lvt/rules-syn.json b/flow/designs/asap7/jpeg_lvt/rules-syn.json new file mode 100644 index 0000000000..c8bf799e45 --- /dev/null +++ b/flow/designs/asap7/jpeg_lvt/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 7580.0, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 56743, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -30.0, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -120.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 1, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 600.0, + "compare": "==" + } +} \ No newline at end of file diff --git a/flow/designs/asap7/mock-alu/rules-syn.json b/flow/designs/asap7/mock-alu/rules-syn.json new file mode 100644 index 0000000000..693b236889 --- /dev/null +++ b/flow/designs/asap7/mock-alu/rules-syn.json @@ -0,0 +1,6 @@ +{ + "synth__design__instance__count__stdcell": { + "value": 0, + "compare": ">" + } +} diff --git a/flow/designs/asap7/mock-cpu/rules-syn.json b/flow/designs/asap7/mock-cpu/rules-syn.json new file mode 100644 index 0000000000..693b236889 --- /dev/null +++ b/flow/designs/asap7/mock-cpu/rules-syn.json @@ -0,0 +1,6 @@ +{ + "synth__design__instance__count__stdcell": { + "value": 0, + "compare": ">" + } +} diff --git a/flow/designs/asap7/riscv32i-mock-sram/rules-syn.json b/flow/designs/asap7/riscv32i-mock-sram/rules-syn.json new file mode 100644 index 0000000000..693b236889 --- /dev/null +++ b/flow/designs/asap7/riscv32i-mock-sram/rules-syn.json @@ -0,0 +1,6 @@ +{ + "synth__design__instance__count__stdcell": { + "value": 0, + "compare": ">" + } +} diff --git a/flow/designs/asap7/riscv32i/rules-syn.json b/flow/designs/asap7/riscv32i/rules-syn.json new file mode 100644 index 0000000000..693b236889 --- /dev/null +++ b/flow/designs/asap7/riscv32i/rules-syn.json @@ -0,0 +1,6 @@ +{ + "synth__design__instance__count__stdcell": { + "value": 0, + "compare": ">" + } +} diff --git a/flow/designs/asap7/swerv_wrapper/rules-syn.json b/flow/designs/asap7/swerv_wrapper/rules-syn.json new file mode 100644 index 0000000000..693b236889 --- /dev/null +++ b/flow/designs/asap7/swerv_wrapper/rules-syn.json @@ -0,0 +1,6 @@ +{ + "synth__design__instance__count__stdcell": { + "value": 0, + "compare": ">" + } +} diff --git a/flow/designs/asap7/uart/rules-syn.json b/flow/designs/asap7/uart/rules-syn.json new file mode 100644 index 0000000000..e91a42bc91 --- /dev/null +++ b/flow/designs/asap7/uart/rules-syn.json @@ -0,0 +1,36 @@ +{ + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__design__instance__area__stdcell": { + "value": 90.3, + "compare": "<=" + }, + "synth__design__instance__count__stdcell": { + "value": 667, + "compare": "<=" + }, + "synth__timing__setup__ws": { + "value": -376.0, + "compare": ">=" + }, + "synth__timing__setup__tns": { + "value": -25000.0, + "compare": ">=" + }, + "constraints__clocks__count": { + "value": 2, + "compare": "==" + }, + "constraints__clocks__period": { + "value": 270.0, + "compare": "==" + } +} \ No newline at end of file From 38dc5b43d013265f0601f53013da7a85f55e377c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 19:22:21 +0200 Subject: [PATCH 07/12] docs: OpenROAD-SYN status graphs (asap7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated by: bazelisk build //flow/designs/asap7:syn_qor_png bazelisk build //flow/designs/asap7:clock_period_png cp -f bazel-bin/flow/designs/asap7/openroad-syn-*.png flow/docs/images/ Co-Authored-By: Claude Fable 5 Signed-off-by: Øyvind Harboe --- flow/docs/images/openroad-syn-clock-period.png | Bin 0 -> 81225 bytes flow/docs/images/openroad-syn-qor.png | Bin 0 -> 161915 bytes flow/docs/images/openroad-syn-runtime.png | Bin 0 -> 68527 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 flow/docs/images/openroad-syn-clock-period.png create mode 100755 flow/docs/images/openroad-syn-qor.png create mode 100755 flow/docs/images/openroad-syn-runtime.png diff --git a/flow/docs/images/openroad-syn-clock-period.png b/flow/docs/images/openroad-syn-clock-period.png new file mode 100755 index 0000000000000000000000000000000000000000..f2161757b9db8bc4e468f5b56008520e5ccba9ea GIT binary patch literal 81225 zcmdS>cRZH=8wL*FLS&bW?4)JWFtTZ&DM?vbrR<$8Ba(>B5?PhXUMX9$qf(SDMfS=J zzvJrj{f&Qq&-2&w$K&;?Ug5s)>w3S>_jw-YaUAD$=j`d@^fVkaBoc{U{e+qpi9{hy zB9Wh<-i+_?M;le*A6ciPx=!b9uR6IJJD8JB89Uio**aNWH{o+JcW}IJYjZ$ULR?f_ zn9st=$<9$$Ow9WK`VCQAhihU{4!RC_mo0WDE;*7&+nk6$WW85;Z<5GJBy}}q?VAbX zJ<%B=0Zi#MDj;->;-Ep*YkC;>D=MR#p{qKwBWX5YwrT_hBK9jwl zkN>}~z&aAu*8jft%Wakp{_pF=fJCM8|M}8zGKT;Cver#HJEs4BIilLs*Z+UNy`6`g z>wmwTHvRw8x8Ap>s*39Dv(wz{oR5@_A7?W*HYWK#JCju1(ZP23uz7N7>fKx9RIHk- zF5{g$zhv=#%fHt81mAR<`^DmBkeHZg=ineX>mE{Fd5avs{L;?+vrnHNCG8c{^Q=h< zUV@RcEWh3Mg!3!9j#O0j_3;)J{hXfpQ8#EqvvupaEcX6=6!^rpj~`q9{Fxq5RbQ_Q z=S_8;>fLuKPk>c)zV3UW<=JviH&W#jWq-T%zm%cu5}PbLvXrw8%R*lD1Tk>0h$@ru z3%<_D5pRAZ#h9C$TiX-G|7Z56rm$WSSL(5Q0YybF_EOL4TOLV;xAtVu=a=p+55mR& zTy|}Gc`;jHnTmlcxVib{(yEy7dmZMjTYsKPf6X~<^y!VW3vFr+y-=ETJd*~XU%?-Dj;zp+b{0Yp;vLP-_*r=RKLqp>zN3)2{wGRnL zGcO-X&dAswofsDvEOap|36%iC>bWo7m$NzvyP zHl^m2<_(X0W#NjWg%5 zPBd%8es7$|jGJOI9md{xtsegS*FDwK&4Znty}Gx2ldS7xXvO*)G7_S; z`orV5B&8RcqhZ`fNcCZt6divFJ2^S!+70lR{Gs0=xm{NF4Kjhd#HyH6)6%v~53-ivdg^44X-*uo;f*Vk8n?keN8@42Q_U$gssIS$>Z zuCHf5efo5qlr7Jv&!5c~+!iOf--qrX$E_20@wJF+Wnm%+>!$v*sr)JergpGa^K9Xb zL+l(J#El=-ceX#e8ac9(VfviDhxBkLv!R;cCPH>F;X7l4oN4nIr|{ zh4F6|pWe|UaT#B^LX8#sJKMzm?w#lT46#FpSn{v79IFipBR;(4VPVeo&%d~apVm)# zTx6nnbt!+d^VnC_-=AW{4;%=}cQl`$?4h#lEp3>SOOSJ;;Z^hw2nq^nE*f7wv}e!e zn%ne2j}6>#LH*&1>-EmPkNuj9BOX2sF>i{g`SRt0gILjxFC1*5`u7_ibsTDH$url? z_1RG1Qt)JdsgwEs#f6vl^CRadsHjXorj)+@+w{o)N0mPnvHny+Ay`WltdX7T;{D~v zXYYF`dh|XU>&PY|sJXe>`1%ROi0kdZqt|tHqmCh}>=!2u zO6nr|hLsJcw)C$Ww4x5aWh^f*Ck|c0n9IcXAD_}SCEey6*CY=d$hG)rLL8_MS*1gZ zpM1&4rw40k<0bR6`$`;#`v*R5fBN)lPEk=6viqF#nxv#;j%nTL;98TVrJGGw#f61| z_wLazOmtnWJfNzkHoulbb$qAB$&=Nqi&N&GqNAdcpFN``CntYp@OCp5Yi4E+9mXAAS5>ZT^z%*%xoq=s%T$KemPew6FaFJ|++zsE`I>`b4a;6;Pg zu0eE&o4$8a_u6|pK`B<$Ao<0M5SyMiDf%);-o1O*UmZyM+WimB3+;?hBzNLS*3{mO z&2gFFXed8q`8CqRik_oAC@_!`_a7)>>b*Spn%N#{17Y^W>f0;PY;3R^;$wP9odQXM z?)dTJ@7}*RX^IiSHdIFJ3QE5{T>l^@=Jvuw*;WpY5agIEBfQfm&&@I7w>HGT=P_?6k6q%BCWlo)CPfam&LE^*==otuhaW|BQ7^&&*Vz66Ctt zGL3d*Cs{tq%QSe)fU4$~WF&^Xyi;IE{8y`yZ*VX*7EdQqOj2?i56`Ksyu9JK>#DC` zS+k8Qs&CVC+ON!CPmuT6oUR!gBk0i>wf}^MhRX1V$B2ItE$tjvm;KmRkphc>JM;5S z2x(69#;B^FO|iKSKQ#hw-yU3=F^%M5y3|o1lPKr5$*Awc^UH-ClYJH8NQzb8-<&KD z<0QFEcHcosPByJ$z}YzNd%+Kq>~eB)ZP`XfrCzHH zoQJKHunkPx3ywSVi0Z%gW#E=Y;+DgmZuat$Cw}E(wqb3iUUC2EC=K6OR|_gXQSXp3 zPiSf$Ra2w*kVxM$w}hzsSZu3EY{ZYcaDQFl_c%iKlif0M?(@_O3k&S>D{Ld9qw4Z| zNl#2_Lr8g(Z(AM}Kf(F6=*SXjZ*ND=>d3wRd5?a%=N2T{h|$c?xOOhw+C7d#)osbD zOq`qq3aaYXU+CRe@8S9}r8W*FjkuZAcnwOyW478eZzq z{Q1QN%aO4$)1msU_07!zxw-asnVOjN|NOEoK0bcr%gep5UcDkN>aFY4V0GZ! z$j8(pr0pZUtqY5N#UIPdq!8Bu*tr3mEL2*d!NI{C+df0LmWbKE%Z{(#dhqSsN#^Zc zcEwVU!DsEy-pd8kQC&wQDq8(Zdzt$-+#4?!+i*KMJGYg2xDtu)XVVF*t|D$jLlOHW zJ8Bfi3s1&kkpdB2spgtuH*X$1+7P+he)t2oRbM%Ga`Ld?-5utee@0o}xJ*3!;VE5s*#sm`4zEfpRcdt{d9#{t7~{Q(}RK(S>KuDid%j? znK6&O--7q8#+sOo^2j&@Jju)yK_r|2sAE>}4rRvDQ5-mMUj6%Uc6bdi8Ed(@j(3XUSByVDy%$-4l(H3T6WA0hrvCF@ zSlG7l@$rDGEf0UW8O91<;wOF&318*%JdM*eB<dm%H{5uwtnpRKvz z(b&>*3OOdKvH1GuW5nC}Z>Epb06a~6lASH4{X$z^>uYDODMhZXFw%i!-9m*AuLyDf zBW=mcvb|zP+(%rtpFDZe?ECUhp=ZNt?(Pro$HnovZqRccrZ&md?aaRxE-Z1BYQdHDFWO`}_1_sLVt1@K(nLDMWrKxdJSg}d_n;#xJ-&y7n z+uz^M7s@5WZ#4XSu5T9=BM%eqoQa9){+Ksq$>QhFpNYEyF5bc>nh@KlXjaceEC8@b zQ+}qr$HI2}w%w9lu=WbJYiM0TxPFeWc=6q0X`)Qo5O-5kY=jEBfWRW_F4m;Dq4`?b~RP;gra&fYc%yXue&B$}+ zPim>OS~`>S@4>tM{a4~UP>#wox+^Q?nJCD5-Z?d@uaMv|Gc9wRli8nVq5Yip4&y`iCW z2XC}f1Er~GX=(A)ag%a&Lo?1lYxL}j@37~RTRK8QA(YT^yaRCh#I{c%`0ia*3yZJC z6Go07R8&PfSN>QgDEh3w4BI8U;+6P-C5&C-?<4mkLuSAe zy2xFCm7~&%-hYExMIQb@$9MDZl7z2q#Z{5Z1(nFTY3^KZ9v(l?`C9bqufJN>J2`1+M8~%Pi&%dz zh|w79Di%ZkB(Uf&2i#nhYg%_MH-#Mgm}sgXU-oLzQu($pm=3QqTq#D7)M;};gD2NU z3>dtxz;=ordy9=)dKptxP%I|)AV!|+cf$jpu4pVsWu+3u=FN>F$9sc3_4K+t3wIVf zre$Pou^f|(lvDb;>|kei|HwdcnU@6^?>`pfKYW<=`}gm` z!8bQ4GtoGSH62;Nb*LB_8BN;VX`P}(Loz?n#dti7t2R!;RKjb8uKoEra`YX6;o(xi zZsdGIuXC)r1;d#$t#W&ZxdB@A-#G2S5f94B61~xp6}a+e ztfsDx>e#Vk%L-p{;;*c&{CVvvFF>jjGF8#BeVYu8@CZa+5mHS=8l)l=%_ ze%-6z8l!R}8y;~7gxtB)P-t-O+_~WJ@Z%*8d5aGpKIFg;RrK`}wB5avsND9Ck1Zdv z=_|j7_G7TSL_EH-d06?)UqeMcA*B+}|Mcnv@Iey__?@vWilzR!kC7R&iBQOhuw1Dc*{c`qEOwY+YzD~ z#88E`L(_B&dGd|ZZ~le{J-xEd`Vv>0JGq)9#l`o{F0fL{%gbwLUZ&i+Gbq=(>o6V1 z!RIGNw+6hL>qH`#+Zg$qaQpVLh=OP0U`0}o(w_1ByR?;j^ZapinrIJhM@DYLwS_%- z^2B!K*dM)c10y3wf?vb_+AWM<(l5Qag_c#g5|mla)fSEhPZA1=(p}aT`@wfx@WZXi z$=8UF)qbf%AH*0m^rkWB-n~PJ@=#Dx)b#YV0RG|tnc!I1JQgTY0L$Hq9RG}dVOR9t z#Btavxb`kvO?x}Vix)TQ>rWhCUFbFPVxV2=%`_~NU0)eHgWiD^r$^dneG>zhv@fyj z^$|5W`T0$`p|2b?)G0p>MHJJVw&BhC^!b2;h?pK$sxew9D3I1MaVTFU@D-nuchgJy2su+z5iUtH`>pF}fldMAr1;;>M_hBW)YY zf>vSRvfRG$u}f#gjLL})Y$xko35TH*o!_GUpFU*=FQ%JkcBk2_dAY=U=gyr(=%UH< z!*y0xS8o~}z0@kLsHoU56>PhkdJ{HeGd=x1xr=_Q(>sOg%`Gf+_c?>pV>!H8db@9? z^(D0O+upx_?{>QRy5*xk6BoV?MU=RDtv|HA^1a}?KT?)4O5p~Dv`f{ePusAF4~8Vf z#eGp(fIKTQj^D*w;N1;{>4bk!eg_%|d z+&OXLL{$9ELt=|liuct$rul?g-oIZ-^09uBmKHEHl*a#iM-=z=2aB180Q-pwUVCJY zBh9$a4sAh@o4ecBAK`IB0Sdy_z0xn)gmeGkdy#n)YerILrZwNTJ9ao`p3#q)k<;Wn zmzconJy>>Gm^Aq9K~_J?@?&st6An1(5_1{2B@+6V2Mg%Zu-Z&|vhvuW+bhSC| z4kE||uhb$_bkm61cMI)-dU;s|xHE)L02Z2GK!8GNa;o+5k^Ej)B-;n0wGX@)y+l`K z6+M?uT+QnSP|{fYduYnw)TvY8;Z$aOW!z>3z85dP2h))2{%2HwG4pH{*>J0ol9`!V zR#{1Tl>DXiQrnz4nmDukLXo@m^|5IAMYXkO*Du6%9J2hBw#CoiKYd~UXl4H6$K1fu z;y0(S2<+ZX99PS)uWI|N{Ef}cFZ6qC=Z1 z1;kQKM{#~TZzAG+q%)Ts#Nl1gIgKL2J#SszzJ5toJuV<1a0NA{geOQ&M9-a!#42Ve z9K8r2qg!kvPt;qV0M?-d^YiDv3V@XO<-#zJw8kvFsF>VkDVBg@K)`}Fj*l5VG439t0*YKzT6S^t#S zT8quiC1wgr%4Dl=c_5xB?jI6sh!qwVM$Hj$OA^?#hhIYCoM89~fk?XahL@ZbrLv8& zVvLBNj75`$)$_eUOXG7(%QAqow5;{sj#IyXZz1WHdzQ4jg@=Z|OO*FWn`NCZ6PnV^ z^Ura6OhtOGCuP~$gPc0oyeb0nUg{NRb?@FWmwMxiV4R$rEEK(Sw%Hr6k3*rB7N z0~r7A#f6Gw%MP38dc}!m4W9v|^k3VNO-|a3^i?SOzDnPLVjc7`^?2&_^Ni1*M=2rA z&HnxR5qb{_;rrmNyO3AfN*u4n%bkCEvI<21P(iRa61RbXk-JU zqoiFwiA&L&u41i-2K}kuqen*y3JbULth3|L5JZzhcd@en=8^V{T`p4$zOk`vrKP0; zP4A8!J^GIk+cPL!FSD9}BB_(5zlEOul<=iIiaU3wFocA(qSbU*)ZoqbQ;!a-qH7uW@#7viRTXvhEv-ovm3Nr;o=w;IDOa((wFPyx zEhTX8O-mIyqiA+n24LK|9-! z8{8K09hA%*o1V+dEM8A>-PF|7@6f0*?O5J)>fymE2ne~xHOHv^d_g*CWPL-aoEbbS zz#(NrhYv9`OZzeM(G*aQ2gjP0Z;V{+E^FfSycL|I>IHgqd^z^npX;kkj zngF3edGX>!f&|vm;$N8T33~lnIwMi(o946Aj}CJKHY=Sv#m&ILf*#lRu=RJM;8}pa z0jYB@Elmwe%YWb)FX`dI>vUpbV&i=kywK7tdP{dGcrN+kqpEs)c{;LOyxMXe+Wla?{Oi zU~Sa`DS-u{x=izzo=chu#E`gcuP0)3D?a9SVj_=WdFVTY-OT*&^WATpnU&VFzZJ_m zjW8i|3%go04ZBSB2KIUDQJ!gK1vP#9_U)%;G8dt2X}^d%^z4}OC_lKJmzLl47&Ql%v- z&jl0ki=2v~zNg5vZXuh&j#L>ZQSk&9p__k|{%cmt%AV%RN>Wi#5kherh@RbUi2M-d zy2 z9k*E@XA~hM35YkS0N3~J-(S_)$^PZ##pB4AvvR+-?bf)`SMG&Ub_ir7c1kX4-?>dX zIx&*@@0#-6|J=~d(kGx@&HV2JXH(R+XlH0qf;B(>V9&ku*b0%qh^J-7x6!^^Zn>%!S7UqHWGJvHD5{v7EIc8k}F2c2z$mf-p5OK;lc&z zRnE?iC}c#&U|?W?C})I7SqF0YK9EBQi;zjro5I&_b5EP8IB*67ZYS2J z9KCA?<__z~yIV6R0IeT7I5DHT=V*+dJdxLZ*poK0!emqMYaz3CD;Uge1!6m-iIpNt*qZS8Fq8=4lUn;wfyc1Xxq$+-; zQb}O%UQIv&xBFclDf_and3wr`D%;zITYnT4iTa~ZnEYyvU;5Kww3B)h(Kis^L3nEY zJI^4)`FHN*A;KT~_XPKM>>kGeI!Fr;$=xo}M~*A)kF>|1~C17`t>Jom;ITelCNm9*QB zg|AbBj;>2R&RB8%Pq6I_7#oxfa;Ow_C;=hq^onn=%L5Z##b|c32W=WJYGU1>v)yQa zey7aCKjf{Vmh{-JX4{N3i%E~Xy>*&;x6NH|FdyOs|5y+DB6JTf9<(U z!*S4pq^hb4aBGUCK5_c=`{wxC4eN2-jyMYDpv`;6;rfVO($1p?0pxCH8L&L7yNHN8 z`_{!;T1JNdzyW47C+{Jp!TPbhNyN>d8wgIX`_z&#akj5g@7}ugV|Xw;G$|Xe0fy|B zXIcJE`E00KSqX!jI1Ab#lt*48k4tpzCU*ZWG;BKdHr|@s`#(%SjuFvAgS!h<@G%Dm zNu&&kD@s10oKjhpn%?LXx3W+S|392OGXF33oiLU80aanh;W=gvp9XC-a%bk}10Fnh zP#wLt>#L^Q=Z_z2Q79_(ypFhxqkR;uuC6ZEdt4F^O&^ebX8c<|UKFwV@q?G~YPNn8 zhzs=h+%-Yr`zD{l4)pO%Fj<(&L7(-1$rfaS*yPi;Gvheaa0Mh*`<&&k%|`?fV*2vz z0-KibPG5P zPS7m|-7P!O(InB4a|I3|@;Y;jceyVvpaZ`Ohe{^_2TZEIU|%zI1acD_%cBB&#Xz5M|ao zQDpVa4=K+H{nG14vpwc!W_-JM1D!r3EH{(ChDLCjkTT8erTj-8dEr2y?>c+#+^vwt z@HzIr9OJT+-(e`~hu-Gvs{{)JC3@h^Bv?24rz&i#K;;Vhe16)3Onc;Hq8#Nv?MFyR zNcGaC5(`FOnn1u+S(ou(BcC-E$gsCFGOpW8-63?TZ2<2lunFNbEQ0l(4_3y%9T*uI zG3hOJleQnEczDp>KR0)al~tq3()3nP1NZljVWW`g_Ki;nRaRCqu?R|E>C73pIrr;S z`S(b9owerpeBIY}I};KFt6)7rU8%#N9GaYiOuZS#C9rzCox?Z|aZL49#5TstpZ<$F zj%+W;#m!CFO8~ye>)pyjV3`8*9F~(ONDfy9k#5%4*H4@}72Uwevra+K0fg~Es#pn- zVrH?=XLzhL-@LVjiIsKpnKNeyPzl82(kAbiG4eic7-$R8{n0!!$;4$d_y)xHv5YwM<})@-Tjnwpr-3oHaXA{Rab{LC(QQydKf!};?E03(tCyF1IhJQ7zo z1-dFW%q=hXy|!mY4{U5^7K%&zrMno!m}7b)HZ*v_8|pcXys^r3=#0--B-B4^eB^J`3Bd2^I>n1J^$I zVWR*R{9zxF3qQw10o8{bZUSTDa~ym2Jbi9hw)uS+w~$+}_qxY^=_L~KJ0tEI6kHv2 zIB)@C7k>R`?-MFk_|JjWm?mXCdJ9L83oF}t_+RFX;T?XdNJ;249*dL7_#^X6#(q%X zE80!NGWRMpn90e>oj^Eh{99v0R$a9|LCS}o^B!%i3ZT%y$Vf1nBBE%ZHf#s!LBDHP zs%N1kWE}$E0Wy;vI&=ZbQ+vZ^XGV(2IowyiuoVdy1@ zHWghcZaz%=8^;cK9i{ zFuo-qQcLHR$Uo-=4>T&Gl_1un(9);!^Jm(Xm6c`LNh_Z6(M3(Z*&z}cG$rq7|L;oW;d9&vtDKHfBas&;5cmC8%i|fo^D4- zfMtbge__$;hqVbkQ6-4} zH%`|H)*IYlU4NA-6Zaa=u48nq9WsI%FE4H|g6}812nfF9^z>-cUKD*o$pJ1#$z=ZY zNegB7R{k~B^jT|khP#f1`htIWRUgrH7J2$9b5pVq^UXIzqm} zjVyz=_u)J=>Jyc;UV@1%K7Pm2^Z+@^M?*JzL`LO0kLln7xY9NC zkf)O&+e(8R@m@BkBN!X+HRqE5?_QXnMF-$T^QU60!a~5FAdELWXjCT!X%?*sC%TmC z9Aj1ZcTiBM|AM)UleSOM7JHj|JRH6zon$QfNN*V@Y%aB*K_%kYQ5WFMaogc(MyPaXPtWk+!tPSZaXexN!~vI_pgI`Pj{)?JF|12)DL0s4VR#Jw42wfkmQE%0x zaC>^X&aFuCS%F_deu5#P!K1na#ER`o|3pQ{&PQnV;k=3~FIMuhH{uUG`}wu2Ameyg zUDD?=Yg5x*YDd>R#Bd0;+K`+89RtuSsZY!`iKP;k+FjvuCh{;$Xa7tS!>zH6;Er|> z|AFMXG#-~l*cB`g2JIfZR-+$2(pQ%FW(cp0w{p$4WY^2-9@H{A_SHv1!%D<|SKJ08X zJRI#cwYs|6RCcW?T4=BHlv&@fy!-t9v@%#T*f}|A(YZy-x;8YZ`^Cn_60gk3ag3Zt zd$ffxWE9)lW-ZPRcSy?0Y7m_f;q!n@`fGK`&(Dw8D5ueOb-?_{?=iTZ5}j`qvBX*m zT@=;)$tmw1MZBSi-eJv8@U8wc)i~>5-w$H{T_2^UruGjF&41~*D^|WV`0uZmPsA9` z?Wg$o@shzW$1!7^NJ{9hTG!#7QoDTlVVZ{gwtJ0B(ux zqP(2gTjqiCdT}-%;v!_e*)#Ic+;M7ZiK7B=rphEav%coh@DkYpd{7lA0`o>5Nwb_Z zS7jSCD0je^r<&G6g5r`9^pbF#SIn*eXOfkI^C#VMpP3C$$$VuP{Y2@V%8d@RR z?z{Mbl|SOd)h|!R)%oB-6jncSbJ~^Q&s1;I#WcbxWzhceA|n_M;HO-Yue`@5G7>n8 zKwaUO>zXdMNv&%uV>C<4%gM-E|8}bETKT*ix4OD|FqrQkM&7oxJDh`q3WF#x%c3uz zFRi%T&b9BA=Kv~yl9d$(WVn-m@Os!X1eb`&NI&}@?;9uRA9#gn#t7eu5h=5SWe$|D zMv>7Qr!8j^<&;4SfgmZ!y%|%`-DIBk(`Amk{~|_%71YVmvGJ92q$F<50WW zUR)3=v0l~!JOb_w!%2YO;|iLB!+mwE?Cc~`+<|LF&E3LS!e5tRCm|5>1C7<6Y`;yH zSW%#Z!@|~oIUtb+&)!wlra5PGD@fAZO!4GZDm9oJNM`iTgwFw{Yk>zB1-2#QBylNt zQh?8dW-r#d(Am}GLe+Y@iN|yUb&XURxmyzrUnJLe!()5kdpO*>Le~HL^D~k!$Un29 zXi)@0C)Lu=v-U|sJS+*DtGfBF7}lzM&fg zjC5W8{anO%J?j=~6!6`!~`>Bfy4%d)@x z8YdE4ek=H_{|y`(?oPZ8E}Bef_T=4vW{FuZF>)n@RzyNVsN=8-u{QA&gq(Kzbc_ak zH2yDM2=XX0!1Z8L?jJkreH>%KwdmEiq$clNP1aUbO+7m*)~M)x=+MvNbG=d@zJaTs6<)M# zjh90~cn5$25&4)+wXn4Ofm@U8 zqEN0Z^H@wqGk8dwPl}Md<9pWE*QiK*%U4V+^>p%}8{9VfJg#qk#>QI%Z^>SFlaDG0o5s1#eS?Vz;(ZClsCRJ@|<`Q5!+4A{W zYb5|0Jmx_a>npT4M^P(h&$q2Otcq*tL!95bb%tX9{{51D&2X_W@<$Mp8zeLCDab?U z3`IbHOSR^;G@s0ck*fd%-$a*(DYCZ3r?gzNx4F3z|0L*!_4n&wJwXcZL679G{$P*# zPZ`HwFh)=4O+8D2o*4ik>Io1sv`VP1?+D4;b;=M!3P&BzAcfJQ{V0jq4NVPY3R6ae zv@s1{fB?+p<+C2P^$!vf3TZU0tX?%2VgH}_Y>+`QRfAhDxwP)?r{UHDbaU#~0H;~n zJeHQ6!D=a`n>25^Q9&8sg4ro7L~K&yrhbqlqHUwX;6y$G%;gau)pUS21?HLls5!MGjku3O@; zn@~+tj_UNMLf(9?`;iPnK`f^(6UD%z_h*kBx#*Xkz8f;lWu31Bg7U&049s|n)au0zpFDn?3UIR)yhe`GZ%L#icz=F8 z8f{8E&;Kl$h4Rv#qMQP&-+`}RheJTg)LwxRhVXy4!)d&z^fqq?J24w_+X7PkN|Z3eYWEj!gKHt!a8mF-{x0GVL%I9QO3cD z69PN|e2=^6p)I?_Q&Y%QJr_HbtBW04^ZpAV6shP2JN@L@!b@bxxTn z$NkR+iG<1(^_`W8$rq?rVn{LH2j`go@>1O(KczDjVXqGuN;VX}#N-;9lJi`tEbgR8x8_VP*uSrzS@^?I3foZT@ zqSlI5*Cf@Se0qrqB0=r9{N$0Iw^HCX3E%9cJzrtS!S@?nFF}*DXn!t20G$h8wo%i3 zzso6Qa|NV+ZoTJ#Hm%md4F!_rRsD9Xzp|8x;*WyCm|u)!M& z&`!rN#WyhAL5nv9i6#KTDQwTFhbK-wmvx&pBW81OXjGxmFg&H93Fhq^%x%-KUt5h4+3fH{7y+H^CnK^tE8{W6i z!V6(XkbJBnmqVeSV^-zd(@+*Do(%nCF?ZHI0(Qvcn?{tvayi{%{f7~ z+-BhB|FYWj{S6(e2^d*JSTqRFi{yj#+c2qs?!bsnK&G`!lwf+elx;6cJ3IKRz(<&De8KMl8D?fhRI@}s${QHwR!5G6i$N=xFu5Mh-=X}cVMJ*e` z>$7N~2jI~oJ`^yIAJ%5#9S&aSCv5G7k-kW(I3%~x*8EF36l6F9mC33V1m7=Nrc_Sg zabUSXKz$4^oI0ze<#+ckEi6z~5Ju)M95+scxbUJ11EtvLsE7LVmSaK&Zw`8|TJJ`= z4TAw2L@zxK>Ta^ILHG{tp%+KclVMaR0Qy=g5VFO`6iQIGdIbWtI7g{?8w)oD3Rn1peX32M^jn#dFPp`q>5KNT{=k^2&sFt1&vC z7$jZ4Wc{O6EB8~$>yBa?i70rrlkW}nQ*JLBi2c#i}GZIo#kiEI>vHFD91b`zMH$xOI zaFVK^DARh!prR74dgz|Jgs*o2-q)>6K=xA*MDi^sDKy)C}HID{TG_L^8M z=)%e`Us%us)}rx1({;thCJb0W1>?4Ywg|8*wnk*I#1j)}n2q&E(KJRz(wd9Ff#0=n zA2nFM>e-(aDh3AJgy95JY#77c`S~`+ozcIemaz7%eJA9m)>Bc5i8`JK^w;Ykg)xA- zt-Ew>m9M|lrS1~NvM3^{!wLAhrtlxd=zrlSi z-30&tdszSfDH;C%&+xx?$lL#(W-z~&{_GhBP*-8g4#MmOj0Qm=G>SY-5rZa-|DIHk zl61n|T^2@%EB(ISaS~n}tYVjgcYJ@SFQskm?m#*Lj6vX?1CY8D|-%SIIn!QnCbgGspCAi8F?9C z@xsKf1&Qbj$}QK3vwEW5SkC+J$lI^0MxZxWdq!b#+9s%Nr<9~n2BC7jXLRjSF4ey$ zHhet8FMYG3yZ`<0`rkQO1}fz~xZ@Nt=LYeZ|U2m&!e5JiWY< zpFWK-O$6OF)yW@O2W#!*1~Cx}-6tFj{c2 zDVfE*>AML~h(nh>Y?zqct9-XR1<|3uL>#%F{z1i~7P^+Y5_RUT^ZfV~lV zoG6Z4+tX8=&?WhW$4gHdU}BrtA1i2UP$20!4iX&-$&B(e?2)jE+N&Gl9Wbe_mj@EW zpU7kwFOG<~Man6p$OzIX`iRrj_o4C6jVf++=aFGbFm?p2wy;Ph z=HqVzbnpubYUHh9K-V7w)R@4mYHsEN{E~@@o`5WF=kS68x*0KzC?}_%CxR@78W(Wu z)=p^HxNJQf&J#s_rEbii1CM2BZ3c%;3@gp_SCKa?Sa%gAqja@(hy}vbwH1R~mU=`y z!n{E81*=DlP(vYml5Io-heUeTFv0}IX@|S}ik(YVD5gp^ip=}Oka3TqvqvLKb+JSC zwZ~$Xw%4gg?gX9D>ZsNiw)TOj{=wV3{g&sZ7bYI*&%uSV3jo6CXDx7{>bmF-J)6;gqfIMim zR3ItYPkcXAVBN(4X?r>Ad?Lij6wnGN*~H{K^rm~zT&lo0L|%hlO^^XlS|!`;AB<6$vDbX1zs&jYu=VY(;*HxFjYd?4!U_2V zzR-jtYqI59a# zO<3->?mG75)T5%Mv24ZUl$1>(BG#|;iW$&F6T*)B;-o)n15}JxN;UU)s-mFXV&0p# zNd=~X+Zc)QeMNc)CtA+6Gkl2s5LCw$^ClfwTnILC&Z;9#{Q;`zZ8ot)RVXDejYEGE zBoPibb_o*!@Y!tu@xY0!P>+a-GT0+U_JbARCYT&}6Cq38s`3x&Z;t;QIf0qu*FGD4 zTf8zxa{kL85q=)43-r*>9KDX>)IM*PxZHEsNbD4Wdl|4Q5kkm+|1OQUv z*#XhfyG4!4L!ma|a6JLT;m{O*=MEVO*IsWm_A!+TGe|%m<$~-^;2a2h(fT?qNPVbz zfyBHB5MFR-XaLkz5I}$jGc!Mq6AusZUUPSgIdc7zKop2k1h8)DO$i+E(bunBxo_$A{{0?G z!E9&-T8fy$V;9nSrG)$w8Cy}Ih{r_GBoNIVY^_F7JJ%eQ<$cz<%F7L)#gikQMG2bw zLWbfO9DS^<05M~hw*DDhNd!=R|NfX@nbjq|(wj3}r2ffCaNJYHqaB z45D;D#-TBpPlNNZyBKB1i*&zh*RWpKIxNDNiD%us`F7-(Rz~Cj46YMw3fe@tBDo>9 z)54@g#Lze-LlR-M#ja`?$`oqq>2YF2Avn~Nj08|hw7g0G9uI&?l9`1G zJrYJe1R7)3W;tR&yojZJ0_fbm!FIP6v%`_2%MZLB=Vf!Ua5J2P?}(pY%WipxU}R!q z*e&vvpO$eUILY1yGkVEcX(?#}YdtRz0EFRY|M@*lEw)#$hK+Tk?^W|!7%ypW1+*ia zG=CEk6GfNL3ZL0nC&%-N{4t147+L-J2wROG-_ZB3ewgR-#jFSMpaVE2)K?zt9Uxju z5-~^wiU7n8C;u*^6rIe=n0V-|T zoIq+S(D@&1 z9ob7vc0O%+I4orQ`D)8u&-hLNl0o9R8R#1$uoJkE?s6|qh{@oUp(qeeXuLb|6eLJK z#I#?ABpSNg7@`}%H?XZ}FPR+;WCTP-87^NoAs%9Z2MVB|M9x#}J4p<SStcY$RrZh-Xj`{Yy`eeBEqxbo9r(bT)Lg ziP!WXQiK9>fahm|bSmv}c)PN)hhuYJk+oi0db%-8%#l|*QEi#n*{Mkc{RuYDZ)xc! z`t~Pg>fGv&91gfn>JwuO5)xbCp}j>+SsEA+4q(hU;5-$ov`v!`JNz+}ck6d(790dcpP2tOW0Q=**WF zU)tU{KjOF5ggt?v3r;2}puxNfca&;{_u9<5*H`_W5Z^H~&j<@giuQhTJgsL7>TuM< zC8u}61IQV$f<5jB3@<7&2i#3GeT;P{o}U3RfO_vU4U|TIWV#5hBpl=J?run$giDI> zJ0mqltSt1kv~WX+v2$%5%>>%LE$ckWhx&pOS`woO%7>JSrwPbJ>Po0fFX}iEz+Lz)=o+6-KsrA-NK57C5?Z z`dtL$2V55fI|^z>K!5+*#!2xPfoLtSOm@5BfnkBfEJ<0H<^)9fOHiy-P;aqns;HF` zF5~Q^${gbwm^-!;=mP_qIRypPFrY@TDBEaJgi{fg+>z0D3u`eF}%>FAO6RYAj`b}N@EZqZpv$9><+rkfYN+Wf9Roo zl+hufXLz5RdK_~`Lh2n~z8uBT`bccxRM|`+xa2?pq934c&>irqz~yi*D}fv45hr`8 zqp+Tt5fd6PEPd!0dfs>AUGP>2MMUR2`{86?=zmX)OG!G5PvMbUa{b*1@1M`>%J&fc zFb~g)WwisHy|lE{-(eK%^T(4`4aM(h&znC?TW171dKJ>*ykG5Q|97okY=VMsr|h~`O`pTt1wE8Sf5*gzD-S1qnzYu~r3dv2Mf zO#L0SbC=yD>WRnU%|~OT-oZd8I@m$yrH-|JnR_A8j1O>erHLyr+R$0Ikw^j?r{m;y zk6mN9NYsi(msx_`$1GBl!|feH(nIesksECZI;$ToXLJ?G+h`AWo4rXHY`uxTHzQ z1(lFg2L=bVoT%1#-^<{dVv_og6(!Si*qvrbNxGoVrDkmGJ6&6S#qWMJ58Fk#3I3G9 zx?%q)F@H|5`ZdG|AeuX%{?s!`{9}$jG<cago zoHv=Ag3sd2I%h=FoU#Blle{M>`B;l5%TGK(3uaAn61Y}sO!^W}F}rokgRsoN07Ftj zipjllOOc?z5rC;ck9LktG<4wjScNV&CWdFTY;$>B<9&yW zVa2#5L4rAvg?pB}yZ&&2GI;`{j~~vzWToXS5GHm|zDJS=?n8rRKHjTAsQ;NRBwlBp??RUL;JWB4B z%O1OnzwKHVgMO(aRRtpl_3reku9Clt%H#t&RXoIEvwJdGvx=(xAJn~fAlLufHvF;o zCS;2eNyy3`S*4KDASon~50bKFYsqMQ%S@%EqM~GFg$ku4BSK1LR7U1~yy*M8uIqW8 zzn*{Y`}W6meShKOJzlT#b)Lt09LL!=^SEi7Jrl*VIG7=%aJc;PyF2%4@2*%24rJZ* zM03FOrVdy;-3rm(kXpE|Z;fSq_4|M^uBSnBqBXJ`EFZ-uCHL&z7x`o$FF zO?BVv8h`WLIZAlMH;rfSGWnOU&E>N3T$Ol{1^2N`!}D2N^RjtG9bLNYzP{T!A1}%& z!{RArSD~Ceh10nXeEs^Rl>~ob%8nA*O`WA2 z8Y@=Z);h+z^1y+SJV&;&KV!%1_e)S26qV^69dqeM4tDW3Y|5yajWV&*P&PF3Rf!p9 zdG_VpZlSRq!;DJHmU+H?Yy9T%uO^hP4;xbHC{O1`XeuJ-B-$=7cpDHKafp|`Ku=9swlHqJ8P z`W0?b1zed22a}G3tQ>jm`l6#)P^qidVC#C})H}DSdwVZ?FPFlONP-St6dr-=9>nZt zaF}Z?)OgZzhmBGsA{cvM!?~W%1^e%*t312eRbt)Rwfm6B6}?cC_q|k4A)W1mnh1Y; zeG2oKp9C{#0H&Xs3-OunSGfEnM8sM3+J0BK!rfK-mY9Aq;zwwS3tQ{EXK1@1QPOlM zKEi=?0DTA9C9Af>-G?1r>Cjn5g6nvAEJYf327t@6#zrpCc$&b(fi)?Z*qlh$bx`Dz z1|&*!qOpbW7fuopD0H(ygNOKAYWe4n=?Z`;ja~XSAhrk+egw)36tyupFQu{MVLWml zc|&gBh`3ir5zAo9jYzN-rBNQB>kCK83eewF0?@7?Z|+$W`r@D5hdS$*Zka!}juL0`-1F@}1zCKvw?BQ# zpGh6uK)pZ0`l+dZ36@z8qimpmM+*$=ki327!AJL^bftizyJ2} zp;H^_=%U2*Be+;tzUX<2t9W@`{m@a>&g6!CccRLr<@Y!Z<@QA_wyCR@S!reZhjI_@ z=^W}5D)bUbnPgy;hp4noh3gyV>hnY4_iGp z0?eS=pQnC9F;pW^YJd&^Dx+V=tq&3nf^0k{}X z`peSCCaCK;5=ot~zh zwcC~{-ETl@%MM{74H}WvP8D4xhA1agNRFDWx<9MAuP(RuN90y?LLtht1NA|axmyl{W4E_1ji%#y18x?`i6T{9-Wca?@Jxdof&X{Es%}Nw& zy7SSmTcuWWZZF<+Z6i&%B(D@onx#+PRiN2Uz(u`~DSD93!Eoe9sU8^>WdaVE5PIZB z?q9T^Y+cVCga~ON_d=hntO7<=1b9O)w)c#F9`RQc zf|x2QEanATl%#hHye>A!k>v46El2w-Cd(%L@9fOzY}IOqfgkx@l$8KDD8z6Hh%tqz zvdn-46W2Syd!pD5#;|;WDMbx13>jC?jv|}E!12NUSoE{6^y!zRf&~F64=}SoG!&oP zu4R{7n0}2_Km5fS2^||Br}(pkrY479Dn*9B`Q9`~Sl<;NsXpo+XTlBc`R1^rQrS8) zRgFx?_!2&^us$o+CwDvE>`Hbve03G(2GCuHN+ZSY!)2`k7!h+p!VdyeIcf|-ntKXG zG*Ix$1c5S8NN5p*h)M_aZEjv(>9#TusDvOMv)j7WdH;TLxp+o%i8rsH!wh_%0iB}n zU1H&xnUe4wqfoN16tsJC9((cfC6B-uCnXX63HZrnqTWJ*Ko8Z&DS+fR#`|jE>jJG* zqt7(J*fo%e6N5^y1dhYqHaK{lq>74dlG%;z!I zFVF8U0b4B!zyq=O_=ZPhX5TAIdp!Oo1ibCY#DCd%0WXz19m(Xm3Wd{ z|3K-hc%ZGHdikiR4*<77D@Tv=fPn&wN;c@;*91>eVak*ZBGm;gKSrD$N-RZ`KgH=F zen6iw|LZzGym(M)Wk@oiZ7cIW)$Cd!mr7dN*#leDzd3nJFdsQm-MLm;-Yr;ZY?j?WkjK23cY1m>0&EvLP#?c#0`#c+hBgzR%$04mpf26ixxbwc z9nnx4Y)gcT(VXUy?{e_e1A#<1Dpuc=JdpbP_wEt( z%H^~)zuULqo=wDiGqba@AG-!jus{&&i0oBVR6ZMhM50TUZO1w~17^Ay-hVadljMM_ z(|YdaHa_eRx)>#V^PdZ?&su(e-1EL{Iwa|mJ&+O~t=mUzubq6@ad@Td2BUiqQgkFT zZ?b0X^vBaX3R^g|FE`%^x`WOKcf1LheH=uB32A%>WNwHg#(VejqJ%}ihE^GVu#I{B zd*EciyE(%&6Tlj5FIJ^QqDF{8e7=_qez=!$j&-04AmVjWGM3GG_`z95^HLv7Nb8 zpSnYI1&4G}Q*+&f=K#9ye^@fOGPpEYI5`=^gU3Eien^+lx?fNbiJbx}3}c~EOfDFr zL}1Ru$R#e5ItL-TCS(b7TrMHujdSXM?v~9(_3QI_gesuFMdC2}cxJd|a``PcdRfK9 z#E7C^HGkmXWGzyW(ZRP0uq+a#$V8k3A<5z=OuUu>7eo>h^Fz?sK@YkCUBVaxMxsIK zh8^eQM_a)Z2bhDBxDvhVvd`3JXxhM+li*vv@wuvZNuWOfE=Tx!G&T8+{QhkMqibqF zKx9dYE?`EWcuRoTGlG2=4&1G@-DZ1oJs@WWU}#6-`-FJxd&d}%8B9=Y4*-UYIeWIJ ztTDFnbHB2>x*_;*RQ%M%KoDnmptOUGmWXYDZbczF5fdv7@7?=w(>P~RTl65`dX^-6 z0`5P1q2^LKIJvd;5L5z6Xo!F|yMiShE5g`g?`!X?w{H^(nlr2pKmw=*1lbJenQ+Wu zs!lSh1vohZ96T9=ixNPQNL~i#7}h(T3K<)he{X`a{C#?4%xm(Wq}S!ImkO; zCaFNjc>=HvNy|`QnxPHZ)4NQUsS1r*Za%(9aO_Z%ile1V7@<(S0rflxAq+dtFS^9B zmvd*AnGqT1-9t{%tO6j?nw^x$7|U{6wPasiQZ?`h9+C#2zfF7|L9lBs*uR;0#-JqD zfh`vFyA?PF&5ih+=q&(9T_9tvS$VPR&`Itf!}u$nl~XH%pk}Q&bB*CiDc|mhCV_YJNYP_mbEj0Zp#s%K@0Uj z4uIw<`a-m%)r42t3^4>&KR4;fZrc{~=n+!Mvn^}V8X4&6(JdDR8cq!7&>KWlf|xQ2 z2qAE5w1k?lGgYj`LCk>z#xijJm4a$QwJ`UU~ zW6&y98l(n3BN53(n7?nehLr$ppMOc3)tV+&HmW zN3CE6kec`q0KHX_VAei7Vu%dM8IvJ^t3ca&%cUJ1adJH3j1>h>gi6hg!?A7tQeZ?4 zJ-U-%@QCWCk9mavoVo|!IH=*I-oH~Kj z=DT4af_|0Hu;#GV}G1eUAWoUXRp_WLRJrS|?pcpAi|ODa;T2E>A35fwyM_ zM+wNY=qyuJ%27L&4(*|!0c-1_mw0)tyR`&l#Ia{KGvPvsLiLB9M0V zavZb>(l1=1sKX;T!9x-{sDI!{sPw*I1@o@~rE+Wp9)5lqRTj@jNdGE2JLz!Ypn`M3 z(uCM#VAG)G*67ps+!?|kB*61Vcn_?>;vi$yV1h;ep%V##v0Ww8<vb|k< z_=WyGG9_Vq>5P3xNziqJk`;Xinlh!(ia>hSXXN4dil~eP6t;artY5#|{?LE=B+uDg zD3emhMJRNl374m&^>u?->xTwPRPOjT+0Vr z`wD)9G_DZ?6>^ryGe&=@0M}4f=h#mZc`FblmaY}Td3^STI*1w^_(3iK`S-wa^^n@c zLs^uG79GNs%)>D7Cy2;^Xkq*7+u&$&hq%$gLnQ*5@X*42%gD7&b?FV)(S+lGo!V?2 zM~T%zI%8HDa|%m$6=_UTh;=xQ_o_7QLYsUS3raaoz$P$iNhu>PK13mW|7UL>asn3! z$KgOjL5h9gUGDS2LurMOQFhk;L{u(A#Wa`N8AJg8g5~y6s!-Jto4cf(}A0xm^gd0cX z_a1rnL)^__(MF7#XceIL;szbT8jdiOa-!!$n-W=ymHb_#rO3L#Y2~o^KvLZO`&S4s z(~yB0GX=A5XCGydYyDzIJc<}K;8tQRMJEc6s#>I9J>S}QB#k4YQ^MopZ)^+&H2|s3 zPWij>@$r{~cN_o+C;xpp(YWKwhR62#!}G-02i8c$z&Gh!N(wy%wExt)yLoxb+tSnQ z;bXT+&;Lfgugbofjf6~0S>w@1g(*pXH`BjEfYzuhV~7#|>T=?>hscYbAsvqEq@089 z?i32VmR-j!Hf=iV+4$;GQj+uvr+m8|S{K#54sx00DkAQMC8W%EXlVps~TN6odZySN~2rs?M^eIh~s;hvbnJ7Qh4z zXo1z3*xCcH>0zu`g#KVZ3I0&Zz@kD?lJic-h<4C{m(;<`4w>P#3;!zwO{iKCV zsQFEi_Zyn!#*1*TWC*mIh6_tgXy`AX8> zA5QxDFavG`ASg!R#NP`;Pr_k`*~S&LrQ_oNNY(|+%^V}g1CDBB^;O9$c#^!(zccKw z-@38mI`Q?@|1y_n?OtzD<@Qlsx<5cCO48h$k6!X{t#MUOY$U@g@I@0H z&JzHi=_o|hG16@apyH8%>&$s-lFecWnA&Vp5Ixs;-6lU(D!QF`zw+1WNF#O>7 ziD7qt$HC2x;9(hg-n66iR(_)oK6)vtZ}LHKYF3Vnk%h7Umx~E!h0Y%@$w~eA)!y`9YKV5o#hC!`NjRCkH#p?sB+!p$T}Y7Bm+}vy{A?tJAF+{ z>#bL3(K{~V_;S(1s8QzI)q~kAV#XYDw_L2&3u6<}sLm%|j6`o(y1c7e=A+jT-2F*z zzN>I92C9;|iL$qpaQHFq!NE+7iO@J^hUpfD-o&bV?W_c28q$~rZW%Bt?7VXP3%siT zKOBzq1X>Lt+vY5@ zdsFr5MhbE5exL8Es_yxog60v-RhBz>y|Mtj4hA!Idi*1(H?!CBL${%~z4+kPFV|J0 zyYHRs^0_uH=zP?R7c(Ir^Hy)G8;p0BkIAbmD^aO>a`WTbnP*+q^w(Vdsq?Qzf&(+y zf7lM*3s8#8k=f0+%6?@*)v`sPp$Ty(_eL)ZTDZpP3-{hKy$7)u=x%_gD@eEk`JscSi^xgIVF+my7NOjVA26d{$qC4rWH(^yQJDnLYV8LzkYi2r1oL zcfLf0)vua2dpP3n)I+$o8SS`lVzqtsU-1$;}@%Tg=P^t~A=Oil3FfP$94(?k7ep+L{vt0uEXW zG$65c4~i~fNEJrmUBA3-ReVTtT+2+}_H60nd87K378@V$WoaJ3mH&swvemJJ@K`8& z5*LIXp+f8L@3k185h8zdKRY$isE+f{B=&s`-xGVXNXo8ZfCRS`btOf>$wkQ1W@ z#eB|n@z)br?N>?JvXkFS6zq6jBe@V11Y&X~*9IR=3rC!bJN9chDg&Qxt~}yss{gd( zxJa8&A32k=XXH)_Y%sA5Kb^&hPnoK~uGN1q17gJ@iN>TYY9mbs>#=Iy&agmNDxS3j zAD!s$N_q1|It#8#U$8Dg)|>b0HpL!1Q+)}Wz`&h)*Q=$bN&$j)Z@;5w`fBHv?vV4F zzMg4sZIqH9bmVyeMld#%2Khz4t1;*CxzhDD;`rQuknf>9KfcUR^0p_5J@3XJOA#c1Z>sK7nV=$z(BqH z{FvSQ$ye7Ub{ZZRMZS-dZFW1We|1vh@~IXL0W2TsqzVet?8r~Pzc5qor1`d0$CBk9 zda&S;WDkR{V9WfNL2D6{n9}pzd0%G8i}y8NE02IGqo%p@b2i^KMP$?3P2wH#tdzz- zW(AA)6@~q}>GF^tMFGB8Ph*KSlS3hgnja~Q!*}l@swKhdRn40mMkf?_4X-FJbQOs^ z!8L9RCD0eMYOJ|0`)jERxN@GewB#Y1{QNud^Ecfm@;@1n3$DyTA-kvM!Lby*Y2Yk%?U} zS?H2VMQ2apyY)*D$GKLQR9v5^Yg&Ev^v~7Ho77&*4Y`4w(|s_5i`=id4@sVXYJEDB zd$ey!$7ILj;tJ+Je#_u*RV~TXy!i_Wq@APO&-RzSHIdFV6x4oSe1YGoGA{Rh|G=Me zatr(tLDVKL#j*;Ha9ypqP&edUE_zQX;gXarZSiLhZgU=fpB(w+dP@7Rp6}za%w^)y zlUysw-~OT>PRJ+%G7FcRo$)4egExND1$hbem0B)UN4t6RN?o;OwF4jq6irCgdLcNf z@P+td)nrQu#^yG0HI$b#_n%a_Vpdtl&=t_o)^_ywIAivej{=4bc*1_Zy}CN3;#)gj zN=h?ab+mkyAY1c~^_#wc2osZpsLfte&S=~*fQ?##yZ$p&LF4kW+DGH3JZ^sL;Zw`9 zB@<9CIi<`1O`yZKAPVT&Ss!jYZrUi#ng6tII!Az3j)eAK_Idu#!z#FTOiTw?jtX zkaN>o%in(T!+Vd5tl0hhN6czo8pYUcpJ3Fff8%|C1@nbJW~Uot6Z~J6hFwARVor6G zpUUD8TgMM6u+j4j5uc$$)VyN=UZ#$HU3!2#@?fn(r*U}}?4Q}ElfjbGQ^%;B*cHdD zH0!$=d1wqeie);=elsGqF)mJ7_uX;hWKVP)W#o^6$#2y?;gS5Nn+!P@w*ju!kDB-_ zQDX(^(ky(@{|o$86}Kn7wO!n2SXhs-%2`)vgA`t~>fc{xru;_{mpxBe%?D4^g)i3s zg9hLJZ!C6J+J*N5l_T?(VA4nrc@@6pUob3xli zl&72&jA)cc%We;mp`*7;fpLW}gjje8alZyCOB*9d^u(7q&nVt9uqPrPNot$yVXQB%VREgEQ zMKQ+DU>ZdZtrW!?aA?@0kE=e=kpmB3*+y5nX-=apNo=4{W<|!vYNKCZa(B1xeW*@; z52d|j>jeXaLgC}va&Zg2>l)F!kN9suQ$pq6m6(0Xv}u`m7}irOV9C z-o;Cmo@x`mbV1NkiN)%B@khg-X3@b?Dz}{#{J%WF;`c&GD#)BVS|Om z*<__1H%l**W;1#Nith~-d-6ct4F+ZoqE`<%MDo{lh zPFV!ON&XL_qQu`0CPbvnM*D!ce-n2W7{&l0Rwdmgk9W5j;F1qfJq;Gih2ebQ@vM}i ze{9#uoz=Y?1497Re$bX3N9nPl-@?kO8n312`}b8Aen*ZFHMQ#p>i-MtvXP_VATb~*5;-46QiSy6m%nP z2f`Z7PY(gB__#!qq)d}5CpsRccIHrMt zjHLKNZ<3jnl~CgMxSdnWae=QJWET+s96AYZi=@g=SvZxm1_T5U`h)Fmpf5yi2yxg# zyAd;6z-;Nk3dDl>QJBX5@46Zy&eujh8q)dzYl+;*vn`(>5yw%q!LT+Qkzhl=_Wv)q zO?=5>aNrT3jb`}|!q%VDWN+i+=hx^1n3R`jGyqv*AZVnYYYJJ+OZB$^WLrUf<6K4+lw|8RgXu znrG0=!iVT!q6a-)r0vM~p)&wnvcVg|((`q;-~9Ji^|OpJA}e3z>5y=X25%i`8{HJ* z{*B)9GZ2)TFrKuk=Cik~z~6_LeVIRy>ojB};DW9ndIVU3NV_O-prAMGp1Jn#CBZzd z+@>rvgeX12=Kfr_n*x_^4aPeYQw7Qhj8Y*=68N9DP>XgayvaPS9Ptu_+Jcy~p=Esh z)KFZ|c<$PTmEcyyaX8TBKcN zXDXD+W^CX8_n!@-;Us08DLu9xQy~ zr1o9Rc2@YusLo+xdZB2FD^XjXTnbLJSYp*l{4PVT~T~s1G*PZPaMgc@}Gu<8<1fW>$mywMs&%4S82B}1XcPa;(7jfQTK3CzRqP!S zJ!WJ18&vM2O-|ko$Qxw=Z}E{5%Vn;)F|1B{E%{oGM%K?UZtYgI*`qWh&W?_VB_^$| zQ+oY2Jimm+ME328`}hS^oI(k*1ZcApjrz^*5@WXP*D>~yHgEl_uLG^~)uM8vd`Hzz zlLuXDk;SA5f*2XzLf$7O5wdD9J-d;c5tbS3ENw5m#gz$M;Lb==6ExfSsVrVLCClLz zw=^!qB>U4rQL-pPQW1RiJx|P<)DM~vbJ}`ro@U1H)nnC5-wmHJM{%f_@Hog-J`wgv z(>J^2wblLYPX4xpB1Nwo{@XH%ZB51EH_Ia|AenPYGLIYC~P&H1dLavOMW zLB_mb|3Lm*;qFsj3g#4Oy12Ow>dHW+Ws%ITl2S3c=CT^M?Z#a1;^&I72Y=b*wyk*Y zh2cwaxgt%v-9l^jP|!hQrA&55a^bfRz)6#al5*}Gu_PFlLN2oDBELtB%4&i710ggg znoF8*7_~c5TF>=1)j#%J_!tG%FCi6R-1P*M6@zhAazY}kBOZfWD+-6d-7Twul=ioH z5|+7Ol8j*jS1dmt>yPa#AM{=gUmh+m(lUI;c*E%^6;1J^9TQ=CB=`Bk|8T>l_ui## zamfFik=GShe7DljOt?It#Z# za>QikWjoSh7iXuNDC8ZV@{_V2xcyNGZ)g>dZ${#)VrBe{^v?t5!z+8J-5K*UD?%rG znED0;!KvYainHpJMi+B(UCsm*3;M^V+@-kOrqjpH-8pJ*!DFrRN$TRMw4(uJwdVwt zW7vJDL-45V^M-~>q!_4S&SYmx&rJ57G2ghcYHCcv8M$8|CxUQ`vq>7=V1!YebeXF{ z0{b!RRede)t9KEl*PzT3CeeZPAaQvGg%Qkm5IJz*KfAT{rw&yxG-^h0js6);;*jM;=_R;}>x%dN949a8=^q=yLzaBoQ2rmq3Gg zs*6{!GU}S4_HM=>?iStosV0s20&M3OcE3OWj$t;C49LM&Ul~=ivy0rnnBhct?^!eP8t_bD82v8%2l|{9pQ<<9 z^X*?2$VG1YhRiLV80CJy=;9ZJ=>1E-)g`R&lHTK{}*QGYmKX{?yZgzs^t#_Mcux5%B zOX6*ZM+9GM5oZr{qC!syN=#JOd09N!B{DmXt4K2X+S0c~uIFY*MgPc-!QMixFXDdU zw3%^|e})M;AX{#I)mzXD4<2w;vz`#7RU4l=CAD16m`}1c#=q+n*~4RN*vawn;UX^J zJ73dje!A5!3mp^KB30JXB)x5k4zLj*oNZfEuej?-WR5tbNE*h)BsAmfq2 ztY+SAx84S9M1aR^zlhEHv;6aO6Je-6qRPN3S^R88b2mEnD@j>nr?Bd2tX-Mb()=)I zdGM4~&X`xSHnuQ$L4xjKQYb4A-?gJdkHfmLTFf?W;*_yCUcEP>&C}G?RW^#-nx6qa z1+|KW9VZ)B7qchHd{thHz*D$vEsf#;{ew!5b9br&&)tclwvn>jX4eB;GaCCKa*N5y z$%VgkGdp}(!o`KXqALD6@$DP#!JR!(bPh1ob)Y}H%cjgGNs=orMn`f<(z8Pfcxonh zDx|OA|2c+l+s))3hD*Qo(Oua{n3rp%-sJ*uvc7kghm$pVg4@WTVP$~QE}xsFKM>f0 z+AMP)^9_?TCHLSya`d!RGsm)h=-KP8)juX8YcM3yyZh1J?)-(o5F%|_- zGH|DcHf(#rNFI*t;;o$3XC&aZ;{|S7=|bAUtn6}Eg=Q)1nB_*Sy$hcpohe4kdFdtN ziR#yVa~&NHumJg@g>Y+gX2s>3xR&wwsZ+d?*Vh|wIuq?;y>9q3t}E^drBiTpw@-B{ zRa4Y(LJYH$vDecVPL8poNj4FPOEIcU1_}93G*}H9Rz)ICyZ;g3KAxW@;_2PRPfC!nNKC%6=fY)9 ztvg)ZH`L@ewLE*+FN8oVIWy=_PMT_Q)OQ~>uRHsFVV9N|75m$0LFV#GKTMvLm6h7= zRrtv}Y7_Y<{z0p@b%t z_|;ZeX>{7@XUg<6o7txilBdBRMZM8n$to^EC?`uvt@195()y5|>D@Vyq*ue?-n zkBY|VEP1g%kKQDww~eaF!%oK&S6+CxB{Ua!%0@SABdclP0JaJFrN>d++|gUDx%e4Z z?~1=?AbyTn>-C4l-JYYguwHa8Qx7zqPBqZpy|l>ls&`6ITS8saF%1$Aa`^D@quC^k z;Li^I#2fdIgJ`n)qR?cqzZSQ<}C)+FZ?(V`uh8& zw6tWul;-5P;J?3;)PUz<5?(W(GlG>!kuBPe)%VU@I)CP^C$^K(`9MI`R63~pb4h{55~X@i&YkxkpLognL-3-=7` z*ge$=0^7^xdc%K6gw3#shfX>>_~R%d=Yq)!3s&WdHH(SGEhH9K4W}P-=iRBzOw09} zqs0%HI7SVvH}z5%$t(I~IWtiuuCZo5R zVoK3RZu5^^Dv^?1Z&Vi->#~>+3_kgA$Ljn3jF8hrDRKKYe{-`kv@;+W72ng1A<2Lk z$tEJBx!1oP6X8(l`>px>Mu=qH;&OG|T+Bd%LQBa3*|*kVt0^97Vc1bkRm>Cl0w?bO4Oi(yG_h~KR?YnR zH9C0fpmSk+q>q`l{2mC(2qQsnvYT!pmCQb}e8;IZC%>|}2Fr8r_4T$>bB|5vo*I&S z@cN%uC5B`-jUCRYP=@nXN6@ft(bsF2_T1l&c^d)n$kL&7f4<}$Q@ytW1jgT@NZ{hu zCH{|d*NB|Ei>Gdy(S)!l&J!UWO}d2a^1b)r;o|$T)M@VL&ZiSy(~Iw0%sfd}j&3hm zb1Rjf6*}^7t9ba8x#fy1_doCA1I%&HC1;0d%rG3TzM+AJLdVEnj`}iW8U{|;3yD~Z zh0F<_nC6w%%X4V5+$Kz|4745CTMKJ5Q|&auXck_g@bA*@#{=n+=wbA{-k?-*r?Bhz z^zc02X;CfOg0?7FelWE<_&r<*yf!P6t{6*MEu|JPc{<%+2TEITC zzV;~-|F`TTQh!g`>hN2oUvl|H7+u|IbGR2X#n~^s)XT>{U!>%0lPJTxy1tHVXn($E zL&pPinWgVmI zeK9}yBvl>zD}V(TxK7q#p+hca%1onpUG&4kA*h@+ zr&;0oS!p%?xg?ERlqt44=G>OuWj4q6w^^=|p<75VZQ8%gwO0azzQ3n}u5`dDWK5ro zbm3c(4udIGV!^t&U=Nw92xqcyKJIH8X3n!@!j#6n*0SeAF#S$L*{E)rEx0rfT?7`5 zkHLJfVj0z)@0A#??5j&2eW~Gu3Q+3kNJaGGV(Uy1JrIqLk*nmRx$>#YJ;1OtmCZkB zNmSUS9r&1Rw=bn8vN}4ngut#faQW2t@1E?U7fu78amI8ZgsgoXN7}ufH#WZUBeljL zP1F{DrCoJ;NL*<99=JdMdOwlfa-fqGp#I06GxMzv!%q(O8%736qlzJMb1$_q+_ntj{~IV+}~BZ_pnoT(xpo$E*+ZEC#-&0 zzf_dXjV%WnNTHDC9y~e82zFgka%PKL;_NWfY1sC(?7n&U??yc&%(`=IU-v%}Q;g=I0O-z!OvatR8JXpk*EPzR1qq%ret8^{vvbi2ZH#k_&5m@XkV#W>YA0 z^9O!)#mu?~!nzIHk`@Zi+(PFC9#7{vZrbd7^(CIwLqEOFODiVEE;kx~bO{-Mw)hzu z0vr1WJ-ceCy^~h4U@f)H@}nFgZ*tbJLnKjL7j=7r!D_i`>HOSu<}`7hO|HAWc(gTG zFbZ3m>ag$Uh~noPY|raYseJfHuH`!)_wnJcI2XrUa4f!@{n>qZo%5OzF@CZrC2Vtr z>x=B<_SsTS3mlJmr!|MdI@2$ zQ#FWMzlBJ6m6Jo|FKc3uz!7=mHvNbDDhAAPmWu^)JPPFWg`6Z%$kBtkYS$xCu(c+( zDtLP=iGAx)tv@#^n)mqgKU>7e2jy-xxkESD$iOX&d;(_~$tT7mWD44ms@rVN+)!@g z;BXQpDzg-U3vN43%R}KKKs{OKVgw7)7jEwsBE@OhsPKi_qOJ~d6~6pgXG#Hq(UA% zeV9vg=;^Q3!M~dWKmM8?E|UObJLaWZ<#7hC?)VkyEepFNTm7uj#x*CcqE*xdm`7i% z^FPqU$xjm42l@YeRwDdK$J2{AjL+wb`)R3#(IGz`wvM)J+5D;ZOzXbtgnp92E&vvB zUvi%NI1}{bXQpQPF3$%aIQ@4maVYkc@_hC8qhfGgSy^#l2~bEXx*q?X_w=VFr5wIM zh>dL>U&(_JvrKZ8qub|94nDmO9DH`q$cpN{y0GtCIFO_v8d9JSWuOF)R4@r?kFN!o z3@!eK4cy}5U5lTRW|Y6wS@Vuk%IFP)xVjP>%u=gQ8BuUMnc?EnU#oXMJ5LxZUJAc{&#pdIfO zu{m;)j9IOsKn1~~KQlr{W~s5QzA)Hc3g>xH>1hO=X4n?Owe;(>ds3Sh?q~u-nHLr`yROa99hd->YB6GY+TBG%v>k)XlTeye}m4m9IdZB ze z2TxxMDtBJ{4=vLOn?@9Oq6`Zs)A@S{3^o%h{_EHd9gq3<*xsVLAEd3b>4&}frh&=~ zhFIV^WUscsH6Cb25{@W-{P`^kB`(RMsPs-mhdv{KKXcY%g3CNCJaS-xQP3iCpg-MJ zVQXjsWW6)D3xCM?e;(qQ z%UU`XN|zSDui{h)rn(1j-K{`s%ote_j%f)1V2rkI1?)!WT{5PGS?CMZEilJrqN{Ub z6Qq0_zG+zU_RTdXGF2I=ETkE@xB2s9o5QB~$gE17&U9*OZ=cuInOa$?bsg>XCw(!t zC94);yX@6wD#Ck&&eHdvoJ*8mHFV0zKzkc&YoS@DfSnO@9zW3Q*C((=gN94aq$)^M zfSfMbFx1eHe-iaXH-Vaphx6VnZuZq1PCqcxx}u-b6CZBl(dS zP@C#g6?_KL0@NPstEjL(e*Abv$SmX%pB}uaN&o%FF%`QPri)YKRvb_6dVjRD+qP}- zsJ1!3+=92SG-S_(B+kd)DOfi6UEe{kz8+<|Zv0+#mM?siOtbYGQb`c+>08%bI4`Of-5B zD68On4#A%M>ZjDD1d5esUMo|C(x6Umc6P($QXER z>c?h3eAwv_^y8tq#n%%jRzG3J31E0e+b3JJu)|jYM#pi=`!-c>P%8P}KH&R!WTcXd z%r-{iQduqNB>H`ZQ*Zw#A@Y~8)K_a~>>XQDGe zg0cs~SxvCaR~LWx1?W`+sqDz_H;vs5O7kc1WAv~c2GMpy_k;m+2O0<%_pzocbXsxy zopuHNJLt z(@M~hWUTL=+~(NoRv@LU%mOwD%(bpBQ&8YDy~0Bo>5gRMS+XRdc(_yqnR4YnYGIY& zP47{^bm?gqcEx>+SHKh;@$evZvz_?jJ`p5FKp;?=yjd^)#+F8|qB+!OWPkN^_%*IKG^BZ#7xJ)e`s->WpFdH3^+1po z=(G^U&61xfT5lR=abJO1PCJt{8D}Kj-C-qA}mX zn6eHv96xd|w++@xCTRt2vv;5V+^G|=)D_{V% z5o|ej2aht$%nmm?gX2;(T5~BeBjXGbe3=#3LBe6!f7$2S@DwD-rH#f$M%)k?n{snID$%3)aL6v{?fbq`EXP&b?=47c4_rSL(Rm0Zu?jmQ9gHK8QwaYa8%BLW zhKk$S+xG$$p#xtc20BhjrMo^2_VeoZATNW}EQIey<;wV4v-A|e!||8hh{%Re!&3sx zlTuS*-WhQ!PXePNx84%3=FsSfo1Yo@h_SNfw@Q^9FAk|{CY(5N&;Q$!nXj8CjFV(^ z#^3jnQ-z0*?}XFLr@cBqpIa_w0fRO&k+iPnwCu@@MuU8x+Vfm9!Ve}FPm19Lv+FflC_atub^VX zrg#ruC*)EtJ4`)2*&SA&AND^4SYVU>?BP{TrL>42)W;6*AN#Eco%^$&UqGPe&1U`e zF#dnxrh0pug3IHt<$>Sc4UZy_lJ*X8LFbvtQJ8kJYMR>cJB0q}-+up-GYYf4utEl> zLlN9Y21*g|d1BAg*Vl)^lAc{pwYq17Ro%LKVkK(eHRgkla4VDOi~wXKV*&BOs-Y*} zRwGv_OH58a1tyTt^|T{PG1rd`Hl;Z)TRZOc928=&$&}zYkrO=qqfm3;vL9x(Mx>;a zf~%u<^VTg9$2W%xdpC#e3~y;!i?+?a*Et0vh?MEy&s&j`U3=vVc2}dNDa|Xx+f+y2 z-7xCB#5FeE%bn`~(kUF>JHCGyZFVpLjc*D0L-j(3FpR5w?1xQm(9cZQbB33585}rR z{VgfaUM40jlj5=p2RKX8s=5UqEO58fSIC_~7|yI;<8%ZWVDb?~m-<@9X+Km;GMRP+nXL(0HXg z;Q+HwI)eDrr=C$?7xwCMThVaoG__j5K07lrvu^q;=ZCA$zd&q40#{?LTi@r;dtvzr zkp(NkMB&W*=xd;edhjVWrKj8ho&GDJaO1w`jodZv)Tsr-4!$kdE}sHc@##_fA>&P( zR;LFJuDl%3bquBcmGEDA#Y2I_c{|`^hz86SqQd5WZ6$THQ|KQC`~hE&j}+um(rGN` zkv6kDcwt*UT&RK605Gq`L~1P#bkiccIQgJ*6+XLmy17y|%X5;^m!zV1Nvx|Z9luV-J<;r;!ZL8m zfbQW-!5MmrP~Vhf<*ztyKADSQ!)GrI*_1WA<4URP#L&Z_KEC{NeB2A;^yIhS*(Ssu zQMh}@j(Ct#cwrXsD_Vp?t>nS=Gb?X; z4wV(|+-pmFoPA{n?epAMCR>gyplx>oTMAuVG4TXZ1+Lq{i$OuWg`6NiIU@in6?Db)f3a=3Ev<@z71%_|)0-DhKsZ zc5;06mtDK1qc3%y`Fu_L0=L>#$GNv6Yu&lwu^Kf$jYv*Gl6RiW62p^|n5@-L_x3Ay zRuKj(bd|&5=8fnXAY{#^e^@%OueZh<)%$iQWqxmM(J&m|?;jjU9zKRs81AN#q61y$ zGBR4PO%rH(ke#6QqFh>9tb-A>0Rt2YI$L?qn%9sB>JI|Y8d zN-V`NHZGP)!XfUA{_ZnR)&&Uo6g>7(7CKS=y`8JP_1yJQpCupXK4aDuJKzf@%1qD1 zFKVN1nfI?&a$x4%k`b=4RxtYMX?>X%?Uc~fQN2f%J+`c(M*FHW@ubmP8Qedxrsan9 zpxwk3tH>53Su-h`o9km5vJD=}Ti;P}*v2sOw&5PlCK2loLrygQbS&{JpE#IJgniAv zvX7WQKsQW|=o3qHqgHOYwx=c6=1FM~+z})ljSogV)I=S%OPnjXuUYFWVT2Zf^cqJK0)5l1AH>*1>r*gE7UYaY?W9&JyMlq?&#BW5jg4l$zO%1WapiseYP(~SGKP15PD)AX*c5;cn@LNl z%=#D=IZj_+8K7+3)o&>j;3oDy0)2%)3IEA(boUH6AN256k0e14y zDPdJc6xjyQu^VJHlVC%kemJmi-S>lp#p}Uk8^;oJ{{~6r<{Y|1dp^C+6qAcOw~N!& zUApf}B0(lS_8T#me_q_e;UxlT8(+js?GWy|D7=KOl6^2==6plj>!>T6?14|g!Tq7Ao1BD1{2+g z;^g=%KBJBA4y)W>D)P{^KS_P?(3AD$K0VQI_B`APuDJ|+bDXgckM=|h?peDON0KQq zC!pMesTumAT0*cCI8^*Y9htSWRYB|MhMR_}3?z()dx`9_u ze;U1H%XdMSqk8*S@D0-73gP7Bf#U5F8TbYo3A%N$NYiVLxpbqz!DSFF#@V@Q`v@g; zX4DMRUG`x>;L*vR*bvoqPYIm~^WQYOj?%5zbh#Xy9n2ZD1qe{GtZXe_ZZ_xjR6FC@ z$K1JN3a`XHd;x~Akj7VbX4Hnr-0{2TotbX_2zT$fdU=&0t6ytFxJDDRsBm0V zobMDD`yQ{)lm3w{VA!&N;HwLe6O!QEWajH1_Qc0?%ZrOUT5df6 zw+2(<9DM6!A@|)J#7TO?CMyizUq&Tv$Zz+~J4JRPKQ**D(WUgwhL+t?onLPy_b5_W zcPVIJT$_77f_vGCFx$JWc{H&%Z{FK!e2;XtG!8igaV&h$b#sL~J^{N%!>(&q(WAlA z_x>J;L8$DRXI3SIplWKUkN=H5Q3`s~xtp=WC%bI%@8g0;s^K~r)aX`4>7M6W#{ z`QSEIktJm-orjopfQ#{oiB-Gq`?j&#Y=~NNJ2{?%dO$Hlbnj0#6`g8*tM4vGEjwr4 z5Tc3+g<^3o^Y@vE%ltjNA0-X%ek7f6vs?Z~j80R5XEXzAJcVNPrXy{m{H*rH_jDhW znPh30RheGB01~TmFPWwJhI?zc@j2IyqrDtRal9Ixakj^qn;mqv&+ia^dnEHJ%eQj_ z&^oLX?xMGHBfr)AflwB^RXD$3jbK2FD~nY42g$UJm+#=`e=91D3Q*JvzO1&fuU!1K z4<^iw`Kb#;lqe&B(<@UNw&nVsuH^d{%=&htq+Qx1U)tkH8>#FXG9gJeIy%4QmXwrEB z$P85WRP^CdKt66RotX)KI`Ztq(Jxuiiw%5}H1k`zk&nvCXKCLw>UgCy zm+x|9L_GfXM$B;?zQEk*JeHa_XIaO{8nCJbeCo6bkXd+|gO?RE-0cQ;zSrsM19*L;1m#A1Dxy$NVmPH70~Eoj@(qoGHUtoP`i8kg(C)&Xd%a_<}s z1FsQ9UC_kUvHJykkixo)7dXZWRGzA;u40T4HYrJ2O@mlfnqcqb$W}gkrXAQ!{K!aL z_&&r9KuD1X-dy{tOxln<{)VK>rNiR;Q4T0Cw3QU}@ES7v?MX8}MW{kBvm^xpwo+{G z(fw|AZM$0QsysYf&TUosHW#YM^=I*q)kC;}g-pHr% zP)G=inG%>|p9p@nX}L)YZRbI1N8qWHF&IZzBL5K;sq9Aw3)Sx%F(cMXYHN!iYczCscVDEj zm~=+v<{Nf8QEYbGmo?`U72lEZX|oKFy6j<)*fZqv$^DPXLbOXs+ZboA|AUuGEUnMz z0rn7fjCdq)KllZAJQ*33#xvh-M1}Uu-|BJG>fU2r(+eH_>=YbDP;)~f=G9X(x7yUC>h+#*QFSQOJf#QVo=pjgnwZrz?c4 zK_)U4O#DV-qzv2=Nlsn5{_nM!AOEY~K*8}EB-DV#&>mL1c5nD9ap<-D z!l%qWCq~ZAei7K*UKHH;Ew{J*)Xyk{~jQzDT;DAt&m?@I@_&xuBZM&NB zJpxABXj$3>jUiy2>;Chy>uBtFJVh0IadKvOcqeE zmaF<7PygGN4{CYUMb3~eSi!+Ux#b8m5d|d>+S>iQ#L$B3$+;=Uqke%J&}PfRG{_>~ z(m)!ky4cHJjO+^mPEWNm$3!nY&b}c58E@xWk4h!rwsN)N9Ru**3Tw1Z$l868 zAjuBQT_;}ZZbuU5=akk#mZs}BPiLA!RuiN0SWtofs2_d!Q7thP+GGq4gSF9MHGeSz ziS0Al5YVp$fPRzkLvgj-xBy3;(DAa&@v@Z8&9k~Uv3jmDYaoYUblKx5lbRSI(T4$4 zl%-G{YJ;TF6taos}W z{Q0$$E$vz)08mcC_>;CRgz!&2$OuBmzm^-Tyeyfcj=k!4P51Z)&$#0YQb?GyeCiR+ z1Snl|m+!AsF@rhCu+4e{!Eq~K5NM&kVJCa|yB|t_efPXh=7H6R8GZ=9j$JsQu!O|q zw@i>J;3yFJ`9fswUL|8u85~l>8ggfwWJH^weWsv1Kz9FCU76Jvx-qDXC~N~Gmt^$g zMJNtP-erNQvBj45APNj|EQX8c^gsOM7;_&qdg&*F?9Wl(%U$5m>Jj;p&U)Szj`xpB z32lRT2$oqT;6gY=!C0{Q9W1h(=2u*zFVb%v6&Y1k?N|NWy|mPn0VR zPJqZtCODN)_3+Z`Ll*IfJ3An0<;~4cLoF*19xy$SPzQaa7Py(hnT-SX*VNBF*y={O z14_u|y+N5A=-|WSl3C!+%jb3&L*iT$qX7rh=>>uNFB0bqQ; zZT1a36sN!Ibuz@6rU38mRM&ep+r+`Ea)0QMf>Lw8w+6orGD+8;JqoElE7A{4k{@Jz z3uQJYL0JA6fFlx(yniFJ-F`-s)l(EEO98CNG~W$EIFp?KG~Wnky{S-_4GYOHgDgi{?I^xuUjxIx8wl4U?ZA)@dEWrG}&mS*0<%yWS9* zUDP%-lzkI-38!%USU;t^#{cW7^{)l_d;$XY5i(F4$y`wxxR5^gOld%x!yq={Rwe`J zF>DD{-YnedboOtWxtK`N|*yuVEKdsFz`|pP~su8 zGW!zn*;s+QpntmNgZm4jJFQ4l2X@OF=Mof*k|nd(z5&|*yXlE81AJ(o(rfkWf=K}d23yVcT2 zDKVtu;By^1p`<0~GHB#!26v|ad*Ri38Tlm1P}_;31B^NV{XiL&3R$6Ezk8n+>A%yj zybqR*%n{IUIGBMQ3St337%gxIcmDStAz;L1K`_HW$7TN_!lkCDu6`bs4m&Wi+L1br z^Q;AWXN_B7CjUe3|yp^VA9rv29&!Rd6hfwFY4%c zy~#`!MV1X*4}{@<(Hy?wQcRyaJ1>LmGXPZ{1ifh_MU@N4{;waC4q>DB-ukMCfJ(8- zld{Jk+C!7aqorD{OUytK3IsWl*zuj?eX$&J4HmyfNG+m={r;#+^T{|K{0za|; z!6!vO^D!+vfRgicvW(1wKklubIn%0=LOMq~w>SCMs)^EFx{{ueyYEX3g!-|a;e&a( zBljm@40c+ro8Wt+zq~{XM`oipn*fdNA)Rj`NB19IrE?lcR z2k2a1JT`AjtE^=x?x1zwd6i!b&t|&|410wpQq;+-FE0L=hF1Y9nLF<|$H}aqbbsUV zq5+U4ra}x*tz<45cl-#oh=?W#6bC}`jcbqwI*r)a+WgCQXjHi&OPTcq&w>o`Fv+s3 zW==ol{i^Z14)N0%0tcsZtopJ5I1^EUCnpgU*#-Lqum~QpjZppDyy5XKywtaRQu(gD z+$-jkH_x+)P34qsql51?L$x-<&;cBo{_mLgTHzxRGvNI4;^prDOlND-A}_P;RnjkC zx9{F5YigSH_<=nvbO*k{UWk{R(%$gj9h6*3pyE3fH1J=+G7bVH z0}b>EpkRBv+Z|8@z}9l;&>#yk%9MlPzq{IqS=3bkncS_I(><7%I}YMfL!hD%U58SX z|L(iCzVStn1BCdyIo>9%3+TNNTVeU%_fV{eK_CsjcN&!db!zDJV}bB?J>VinE%+9~ zAb5-g=?aV9%n0P*LN3ky6R7&h^k==i&BTJzFgA`0IGFW@mL?;d6_IgqC-{Uslksq{ z3H)<{Jw&GN$?n1e)D(I{7mn!YXr!`_2vLNEh3&u&i}2c@!GjHo%>Qa0@E$d(5GK*; z8Ad^DVg{b)V7{>K)ZN+H0+DaD|KZ*&h)euM&?4LB!W^9Qd%vSv!M!o`Y(Y6Zl{C63d$Jh$@C#1N1}JcY8(tuQ9uW&aAi3@wY<43`(H9W_EOKQU z-`EbsL9vh#AY?71_qV%?2gg=3xRJW{t4lUmiu}5G!Z(H2-*ST->F;<$$%6~xw*P)1 z279mC)vK*-rwYLx&;r_f1LiqT4i025h9mel0AH2pZPM zFm#wDMUWZ0!iiI)EaN7ystmV!|dl|01DhcpwWK#XLNmUv9RoKB?o?V;2}KJcVO%X@EY!L zGS=X_V?WYRj0u*gmkYizKyzyTx2I$=_xXxz_r>igByfUFkiN(n7?wkI0d@a#0zhjO z(CM(#2>rbDuqF8O=YMboxaX5+%?Z9cAlyn)=?sxJgBYLD-^3qA8AI6*Jg$)xn?|-}%Z-wEF-VL*S-q3mo=VIs6_6cY%2Ys0f zK53ZlY!wECL3Xkz{h!(M=m-`ygdFQ%^-MB8d?4xV^>aDeod?PEtiN28lUpnRJ_$0w zaAn4s+r~e&!347_9u^3Zr@IJ_R-a)6R10IgN7gU&5wT}B)5|b!WRM-GqY*0!>vJ=-MJ*m zk?jV8Q&W43&hqZ=Pty=41afH#@-F%{K+nF(x&&|Breqk~`h-7*{M)bpD{b^Y_jOIX zOLp@*aGGJHXx7))L9t&+Q&SlBCqzsiwirAXgaz?{>_1u*H3=(D=2v1E5KZf!ehAnf zxiWeFu{)8~bU_6;lt`)MR1`f(H~^g2%C0wO6IN{ z#B4~P3wg1E>B-|GN$`kDc;U?wooNb9Z@_n*C1aCC11)g4Ea&X_!V#4i6I>-08e?F zrlmX*W!!7*m z90b8eoIF`h>UXf-reC&VRQ~b5x9+g#ag#y-UM30&{zrUwQat*Jr)991*at?>0$3hJSNN}QlJ_Z zgaA^T$mMWRs)?b9Xwls=&hzI<;cw0xd%*7`>$eb^LB0y zGh9x|9dO9(cDD}aMad5_GD)~)`F@S{37<~m)u(z#QKDT^)NkL~f%R@61vZdzLprUM z0LTaeH3G#DOLyZGn~vgMZsCcur2!5{q}R$d%W!W_&A1}LbiqUp}<+^Rnb$zaF+ z^x6Ir9s)jq>jG`#bm;Q@E3?rW;*UmEW}~IdT@tl)?sGrHD+Iw_7ofq2&c7@4l1;20+DQp^(1jWqPB~jSZrM)c}*fJV@AzwzL${QYH6H zM@xx6j;{zc)dt9g_7DG7i^k^WC$hJ*dmO=_m6$T7ck31o)F7Feae(A^h0TBvh2*p_ z>Eb|EYYN^B*fEIG4KU~sNFl3?#}p*gVZ)B$U+u$kb9oQlC4WO%XSSX9RXvDati%7O z0HJcT%)yf$p85Q%0JaJ5c~&r@Vg|?oM8(q3^d>|N6-@^~MdUBJ0mgEHdmx%<$Yb>_ zxtPal(1RJ}l6i*2L{r9#M9+G&%vi;VeoQw_@$)yXUlX_|s79H2WU7YEMfj-1THLz^ zj-1)!qt#Q_u$pX}82iK`Uz$K^Y5Kch~{82WekJ_QEZu-c-_k>EYNBh|foIU-t?R&(nX;L8oni%*`Y__(wq(hl`hY z7Vx4fkgNX1qa&XoD72q&zagaP@B^`X+Aw3+Y+K63D`cc$-rrUAuf)4WFlDJUQP4C0 z9x^r3X8)q9|B>dAo^i(LpaQE>Qs6AeZV^@<)@*;921O2}IH2I=73#b%=qy$+#E^|K` z5)xxR8I+hVB)w_UQ)X2MZ3tU2g+wki7#jjNzNxo^{GSHRmY2N_t)tJMo#?<3kJaGY zx4$h(hd1NutHl1nWy&&Tyu{+Bs!A{}?CxGUFa?OD1hym~u)vkcrdn=Tbn3!)Lea4j zQBdT^`&Mf!Uwqq)QM$O+qxGkzP;;B-l+i8E{=4Fc&H!APZA!)ZrzR9VnO{FTp9<~# z_FJu(q(A*W@@8MVgkI;A*}Wxvv|^+^@nG@1r45Lu_^jG}ScTaITps=(T`%*ti~bJD z0O5yZCQrS`<6EVo1Br>&-I_DA;|i^OHZrEJ$hJg-2_0|d;72aV{Tv0D{O~_ z>LXwL?d>Wnk0-cPz{hE3we+e?mWpGs^M2bNIgM2+8WR=8>NPlU2Y4*trhp3*1A?lb zJ!a7PDf&;Cq$%SOIUk z2jz!~3TcJyx$l-ujuML}gk^|lC{TmUy8#!MG8b5j# zR-u2cjALMLvDefrndf`|z9`0nfbp4TmMNPw_Emj-cp#eWa4Z{pj&DI=PEdRF0B7cq ze~j*L>8lC8heW0S!W_-V6XR(Q@m5!Zer(?uzCE77Y{J`@i{MhKE~vXKV+4Ej%(zXx$3~u>0awd8^Xecj zEG)oS|5;rXz+E5|>tJL|xNc~#crhMY`MJ3WsK?lA`ZC7F&ey`b$o@%e@NDaZ zJq@Mwq}*vQyL@Mr@a^|SpC@K2crG`l?+B5olXwPjg<0sEOJyplqsGQ>y^$*+R74%s z{l1FgBHWqTzSSeg<0VO(l$((~GEH^~VCR4EyPf#*UDIRFnlTA~qB3vlj3gKRDi~!) z5y>Tl{^c%~Li)#VA5L0g_p0#{QA2O<&NR*|mn$9yK5(#!VIt%fDGphAj=A@1g2w}r zXRqBky&}LqLlwr53lzVKiYNf>PWJ4aLGaI?3{dA)UNu89Q4BK%b5A1osVfG<X@(z!BKWOgjTo`RAH#t|8t513sKKBcB-N! z3BC~%N^)KrV~uMLeUT2IPZuVO_d$6M1*R%5>Trsqe$IY_rQJ5vdq~K$ljLT)+4bcw zuXzR>Am)egGN^pBO9m3g0Nay|u@PwL^ei$S+9#?3peLd!9`vsG_R@CBqxW^`M7y*f z>AJ-~QT5F#3ZHAIw)Vn~9TM79o9tfiW2!DWPcJ>^{*&3NWsLAlXE^h+!dKj@exizw zSXhys2G?DmvbKCB!{kVDD?bYyD*BPsf~;F=`{0ZhfsrHedGFrUBD+-4@-R+*aqjTF z7(2VI%ko!Z!@Yk}eB!xE!xGMb@2>kdhYO>nX_Lpv_Kyy0Pp5wzubS#; zclyI3eY%m_I_A%LY0b>c3qQi6D$hVwASR{(Dd&MB?FW^8gv~<2*jI5}gd_*O?Y&|_ zOVsYQuetY$$IMi^qAKaSbu0;SER=)>M42sAgZG6mjdlF`P0CjsIwT}&-qgX++u@qb zqoKQK>tPV%>7jaS*-adaMo&h=aJhcMx;0T&A=23(rc6M!yrssFr?KXuM908VV#Wj% zNNucn9IHICy81J}`cKK1TvIm{s+YZwk@>V1%GCNn>}Z(Xo)hkufXxdvXzarZn=yDs z!y&_!j=`W;Ypcj0RjFrouKw4L&n~gAA|@ct^SgHK554xZsRFG%%lYolksp|R6J6Uq<| zymhz_BgaNwt1m%h7zAqhGoaNN+W#vQ@(}<+6nU+iUr+JKm}o-w*Gt|ohBQkNoKAkrF-BF>9bI=}2FS8J)8t&NN`}x0kd(+oU4>e5 zMA92Os4Xdg9_pPYB;R!}z7P=|5*Bn>E!lQ$5rBj{0g_!vqrisMTkr7>_I~5r%su?# z3~JbYnMy((%+_2Lr*36RoeddLK?g-&uz8FXx$Uj_v_{7%_)Z^h^UzZ9^H8*>RG&6Q zrmlAVN1vO1>F<5W2dH_IS^E=Gm&in9OGG=GA{0J~P3k^}r7VEecDQ}~7EzI5^SeLy zFYrV;-k^o4mc`*R*nAPmOATUQ06w(c&lE+E>jidMoHY>PN4t5Yea_x-TfIF;>M zlhAn8FF1iOk1~pbNM-n8g66X@|I2L@DSiy!8tE#NL&F+G+(La`wDWl`lPEbZotY%3 z{BohJUngJxay&qP`Vkq3SQ!;nYo!!e_+N+SkXiwj{YmbOmB2 z%NHdg7#|A7^v~3xVi(Ugv&IaiCLc$sV$L`9P#ZAJ>@sMl5kLNRAC0*xQhfSxLW&p# zZy$b^gdblA4gtGBUvwyb{{8dk(yk3yxkLe(e2bwV@xs7e!Qk6>BdDxYKJ9ohnCHLr zyQA!6?P&+6uhA)MuV*h(F;3RYbrD}NrmE)83w2vHZeIK5LTqEDu{xEDk>8E4axve( zF$7*0zNV*0p3-)v-Li~r47y||)x%3Fx2@JRjiDJL&0n;qG84wdWvh)xU#q|OEsw)K z0MX*YT)~VRhemJ5qmGVq)#SfF{e@;cHEFkfc_49y-{-K8>gIHJR*SexsrhXcwV5)uuT6%^Ud;QLMFeA z{heO63hwC%_Us0dgz#>q>m-~}H=aS^8`{E9l|pQ+A>=NrJ3Mc0FnqQJYX#XBF8@ySB7KR8KTE*+<(@ER!VE8V>$ zSWuib;=iDv`n=*TBS%oT!Py85Qo2RdHNX$k5GXORe`=sqh;aF!OqGswPzS!~_&JT37NXr%JwocF3 zOWo-e5rvaHgU}4CRAjF$)J+$E>w>+z_>#|`^e!;o7`%&l{kk*FLN#)`)V36MjW27I z2}(*39tJU0eWCXd8@%{NJpaWVDtoPDeL4$8-|`mv=ulyFhA|jo{Hd;%g(?K@c+!(6 zG1b*?0fv- z%Gd5LAs(*#Q$~_>_7bLn!+}`uGdkJy7T54O$Y^v&l1Y?v9n}dq#K~yeuG+i4%iax` zRJ?xm;TQ9nrt@ggvj>vVP!Pe11F$}#{s-OqO{V4lshc$L<&0)0eemO^n1l|ZP@^zw zJuDmMQ4%8gA#KdZTd5CN&hZJKO*luYNLj*5^PVqAA=)6wQW!oW*IX&tq$7!EXN)}y zKYUtRr?az7oiJZk$V3wxg~f!iam&-H~dNacEXIcrh;&uGr@xti=*EbbZUn-G4r_`!D*BX?`pCU-{){zJO z)*S99odg`Z7DdRcqLvj^+;OIG*Qq>?6|(7KL11S};Uq|Zt+DJ7^700#hQ*BD ztvUhdVUma$PsJz4daHk%irn3b3}j*f*qD^Itpsi3%8^UJ3Q@6onDssJiEntpiF-Xw z)Y19}A9uUi)=iQv)`_pih;Rw`*eZX;jZ4}a{ETTm3g)NL7AxtRY{IBA(9nl-q`l^b zB_y1IEaoKLTg0OiH4wD8S9vI%=ePgE!Yx4uB@xptT&5q7IMYMJ+tm+BV=Gp%29S{m-(*QCt- zK`axR?}|Dt+Ysp)P~_BDp!h+YulFIYD$j9G6LTm-GRfr!w>7j3=1DM**Y7FNlF{ij zeTzQk5zgR&9o;j6F-_jW)RFHxe%I%p(IRI>*H<}@RgB%)5}OiTz4zvR()SjYIOnxd z<`T6%;`|rTN%`XTBp-=#8=Na5Ic01jX)yrFD%I{xIqT42NP;!?qm9aEceKiy9TOf= zn5m@lu0?Kkpj_q3cG9l=-eBhf9zCe{m_U`aw#51M6SO|e6mzMICHbjN$ zxx{kg9|q8%N1tNZl}tPS;r!ggoQf*7mrv~3^utS&(|Yp^A-uXkFL2Le3YDcQ(oA6Lm}!7q2;r$dl!aPz< z6KXP&Y?8I5;Nq0QcIWoUiJq~)a=5`zXC*vAkqvoZ@yIQ5SQ*l)sJearj zww+Z^=a9+G)tO?+JVsYIJ9 z+!m})1zr1ieO3eMOnBOl_j`{kw(lirhJ7jNwi-D2W9P!8J)kN;^T40O^H^);C~Pca zk3c@Ncb*EBr>0_9&geSLvu*L5P}q#egn)W``@&Fwp4iBb8jq>&q-~qGM=y@o71MjW zmDXN8`cX)`bML38T;_Ur`f)cm)8QDwaY3+ zos;;g=LvD2fc%FF@|b8so?+a_=AoJr4cX646JyhsRl4s{$3#eKC*D zW#MzUEVK0NImyavVb|#&Jdi|%rS$S?ygsZ zPV6)=I8{76Bz|zOL%LTx8K#6PORltF$@yNcL&7?{^2Qec@GW??=36=AEpoweZo+aHrQ zEBoqB*z5k<@Y@w+rNyN1NBrvHJo2}ztoD|74uzxVr7F6%z4HwTQXC_A)(5#Rct>aB zl3v2beiZ1^%s}y>y!$P=eoUvMJfTBr;=2u2o83WQ4$I;-Oq6 zj6ckp79eql;M>hD-gofjNGo&b2W{SL?Ra+OM-+>4#Lbe-&B5g^kLP=1F6nYw8Z=5S zl9^7$Y4Kr>rFA%5?i-SHy||d&?z-e51IDMIc635I1wk`JK@m~;Y;NX)R?9WOoqzrM z6_Jqx8f7Gu`=<{!b54&@Z-8L|IVeUth)e-XQXQY$B;ZgSp$vg^H#_i45miD2FfhH| z_NpG#SmHq{0=$)HphepV1k9Ve`y)mGXl;U8r2j_laIoRcr=kegXAa{a-QHEC>ArHOqPy&)uPO0C2$eH~)-16K_BI~=8TVQX#wQ=HZ&Vkp z)l&TFs@;&a`_OqTH7U;I_?T;ZT_TB8p!dF6%b#o_+T7g6Hy^8Ma6pvX5 zv`Us$+jAAnb;Ylrr%^7r7N_E*LgdJ3=R&qfE-XZr8mXyVIY%wi+IudvC4o zY%20eHLm!ybnb3l(#zcNMEfi9InPalRPAE3+Q}Npbl3~W!mH_?u`|&UHg)j4D-h2x z!{xf71sjF*F`$M8G=x=7z@?NO z0{=Vo%UmO()ujSG%sb9bwODOP1rMMXf|qu`KMq`k(gh3P{4PSR$s5r?^!E04kxG^F zT4O&!E{yGv&dkmN^pXP_w-PccH&6I7l{MdsEK%~+sgWhu=Q&m4l-}ybII|urJ<<*A zeV--FVWv1sFCRE5^Uz=L9ap>awI+HKQWH~gf7fp_rNOln#1hX|`O}<^?o{7QK1x1_ zU!RP}Z^Nz9Et*ZP(mnhbK1g&lQ+l+|u;Y#+ZxBnp|9K%nNB7|p_3KY(@|Dz|66>m~ z@R6V?i5k<{mHE(Hmx#7&^|L77t5Bb|!fE8j)6J;=X^_kLs#(jmCYZ|X391CwED=?* zbR?ukVSPL=V)~5z#nU~fwB^L%LoDeX*wngj&c1rRXTfxAkbr%ZBJQ0!S$doK>W3e< zm*2i-G#(_cAuEfi#=G&AFycp`l6(DIX*0cL7t9T*i=!;b)Hl9POSk&H>n|Di>w4?x zDYrL>wi6`l#2Q*wJ%hrZCnV{jW_ZF&p*MWs{Zw~Kqd2swor;Vb=Sm{ifc{x5ZR{a( znufz(75w%o$rA3NjdY2-&U4op?qv;&uB5lIZ>{u$1qhu)+qr=Jv=F4E>+X}3V-klG5jXo_v5@`RmcxY2bHNq| z_wL!F_RU9hX^4(v!%!+e6sIf#YI7b&&1Zf75xlS0E7Tovr(&|g%o-=0Cyb-LKinN6 zauKRV3Um8CJ?0ETbi_!yX$7SRW!5t)9lcu3tY@z{8jF9oE~d%BX1V#qMTjs>UP)1t zW`SDmVx9GL@RvD7)`k0Zf7%n+#SLz~p8oS=p;W9Ql}}YYDSS}ktTh7{&hl??el zE>Hcbz6B*5b(BD_Vq`iVAuV=D@ZMpv$)}#a_oM~ORrL8s75u?vcLxn3=Q)Q0)VAw5 zb94!=6v*zL&TR-T{&9r%gK8RxQ3;?-`?A%L*7slak=F6FC*guk=!hw3}m7=@b*Qmu&Kh)$|J7SQ+oF(W|h&t!>1QjDeB)ZWeH_Vnr3!OkH+hL7Vu={h>% zK5_3&0C6|*u z+dl3b7oTE~0-r{DJs(Nhya-9-)Pw*H!_=kL{V`9L>TcRecM|`>djTt+tg8exeAq%n zw9zOM#SrYA$(^lJi7s`h!BFfZ4farMb%v=8!<--40Ysm!JR1wRc_vY2NQX-`ddbIF z=Wa;pi^M0lmHQXPx-U3T0o{fW(YCmeLk+9LMQTi3IWseJtxfKTlKj#RJCKr*>LM`3 z832CP1|Y#0$icxdyMO9|4Tqqhr0E^dA%PksAi0Wq|KJdi;noy76ja~?7lafT6|S3| zWmAO#hiAcuyl1KGEiY))TL9r%zhXnvak7?GT3Q-G4I{X1kQ8nN;ThN7%c7$e`tbZ; zM;D*Pelz5wmR36MQ`>G|G=3P6_}#mA@o;Ptt+wIlT-3QQJ5-B5%BAL3cGJn;B*CfE z=vv~Gbk5dbqUD*jTIMl5pCTC@NHJZ@EY4$^j}G`*_%JHoMqgHg!=BT4GV6A?B{T~` z1@y}E3Wu6gSw0$6VklQU(#yUI(c{joQA$pmGOw4Zo_N_jgNVNN1$X#fdNY0UeM1em z%X@PSHVk1+Caa-_8Hx|Jg?^6pCwy}@{le>M_P64UWu%@eU4ir|RKC$;vCff+Kf%>-G*uGJ_u-#R2EVE}H;<GmESYm71V1Uek^8MiM&p@^^s7wT-4g2G($%n&&%qa==h!W=)bT?} z&<3bt+zeDAiTop!LAa&MaTWJj5nzv4CUBf3qPZOIC?qez2de1N4X75=z=q8XhFBpc z5+R1`Ag_b`VeAxQh)E#58bYD8ahNiknyh4{VY16ewUG3>yw1b(iNsE0YYA61qVECF zRfbp8Xl zZe6>796Jpi`Ie`8#!-mH5%fHP-1^0DAJlUYa*_ywax#)$7}1sQ8UNM4c`1G5S^)7~ zCH6k;@|gkLTvh??Q623OLrjr0h*2rfV&}q|GL^Cm?!$Q( zpCt6v7`G`A=GAwJflfgsSFx>=ysV#z(LO;cjq8VsB-AS&y?iK_B8pPIa1Kk~gEM2^ zE{YC9Ep^jw!Qo#>gU=D7Nhrrg2l_;$Hi@Rr@de-3#@S5^{%L0ZF=Q+|;EN1Fu{ zVhf@X0F7uoK&0+0nj8nOt+~kl?m3MZdjZB7JmFhFvwZZ{F}^2fWmyzh?;#fQfe6M) zAcVx`c8;ObDeS2u|ySwrwjNKZ$3RIvg^JpR%iADh<{R%pcFV1kwoDVQ|1h<3}y zBFYcIXR}`#*`fxnsPDVmTYMnWdtv6w5-s33*EhQfitN8ypqT1JsX#pn^j8opY^Jfm zCGq0nKu!xqk#iYuJZd5W*OWGKc{*`Vlg4j%^4s0LbFB@hq3s(Jt~BY#U6U`nHM_KSDbLgyxm9@xwL&Qq9f>Yb zqfuO>2|A>S*W}&o5-!Fke!2Kq!OcFwkZEd7_5$9N_IQgvEC1B}Rfn_F1MI0x8slCn zYE7?htlk^#N|cE2KfhD6L*|uH@QKv;xsM5kz$ZhHzmOn56)B1Lp{hPQOES2eQ)WURw-`iH1#Gjv3x2N+^c|A zG56QlfOUsYmI;q2PlcPMt#CI%F_w#iN@H=)$Ju0_E28F^-!){SRLN?o$2#O{Ivw1hE%hY z`%X_ZFJT!3TPEPV+NYHWJ*SXY5SoXfC=Q&<{JyY>urI8yFevLGtU-k81mbsW0B3}<3IW|iJUFxv7!4xc^}N#> zRG=^mZ_lk|g~Q+$R4(uX4VXS^Qce~0l*X;QKpQ$4C;D*VAuOsi7 zJNWy;z6;#I@Kc!*9c_MNdh|j(vZF-2qE4hY_;al;nvf!`QUFawrb=ZhbVi7Qb~{Tg zsDZD^RLfLs*O_>%P)ED*qmQIxm1ox7K>>hZZERSt4ksjHFEV&yX?*$FD@4vrH0(Tn ziSniFv4Madc?Hw)g&n$NdrrTW^s~v;T|oC(hh3Seuy&6h0!&vx^-l*8uz>{F{}1He z*o28&VWtl$8R+3u+$(I%dF3CC$O_HRXE{&SLi|w=0+B^`$E$>xQtp=ZC#I&d039AX zkt-wM_z3HS*9;nm!weFReE$)*d7G2g2-LEOtwlMa@-9H)$AbgVG;l>)0TH;?9Z(yM zROW!}Q4fNcH};O8g1RXsBC5GQvHxGdon9kN_D$cLfCga^%qM;RX#Ji)Em7Xm`7{SD zE|O^S&CX8@$v=-Gt>u-SzB{$#4i>-V*)HAKS$M~<>^GY>{|ybZYS9affXOrlR~@|_P{-A{eLMJ)U#778g0_+M6;MER z2Lfq$ZZ1ehlA;k(kQPkhn?qHeZ^=Vh@;u|ktLv=cj*Pi1v8>Uh=_O`Ma*R6Vs zxrg8JY3P+nn9}91MOC*8?oiNMyAd#`ZHbEFw}v+kHNPXtT>gql+{=d6WVXL`k>YB>1Vc; zj@5KX(<%1C3*_x)?d9e@w5r55c3~@+aqPH1pp(E1Y;!S06cp&Erzl)NEf|g*$oQM}I(nUm9633v9{S^i-Ljh`z#{WiK%->$e)69)ET;faGMKvBNBBD_ zE8pK>dGSKZzujuW96Lycn~<`^rlBW?Je@Crrsa_DOJKv4w}6rs$x7}n{%Y1tnYwG4 z;qOcQM5Y?-?f&u6GX@sUYb^5>Z%!+1oEmgaS-q5;VUPXdb?FL4le4vo|KWp= zp$h96f7`9^&3@e4^`Lf_X&I*dG?Ez6bDEjNgH)g-CfSR)uj{&sp}l2ZL58j_tX6V> zlvE_8EKLyWy<|Nt#&VjA<+iGnvMsK%>hpbXTU-iOf-@3qr)7zf+p%>%?VX>tlTUoj z(?sqpZ~ps^u7%JU4H6LtcM8pTSaET`e=9tf@f0Y4_QYzrB-4055Yip&5Xh5;oT_M$K5B@c zIkm*#+i)|>^or(~S;A>ahDmBB?^l~G^uO2z#HpTDQhyqCV{xaex5O1`B~kLCo(?~0 zt)u^9y#ayd(cr!0l{IUL!sOv6kV}ivKu6AuHJR+oPtBqjCQ>Cs$0_%)z&AwOF$sag z>|3v7E|#bqY}@5ylE7{%rxVZS%WzIS7uHqk=_^^L&CYVihE$q*09A!d+p!w3U0w@s za}v_h;_?bAi6F3QfH>ghuS#GDv51J4tU(-xH*TV#fkLTXcN|laf}{yx{6ta`NYvoE z;TS@h9#3w{o!ODBben0tHLCr z=-W%apPcLctX+&u&i9%v(~{nu_lD|d0B$J>V7I_2a?xLpN5Zc}vM3qyJ>otJtFXDJT*#V#cg0f%9uV24LzyNH%YYNRRc!HInCQE=4N@1o~ zD$(z#J)E%U{L$Kf?|j513248A^ePK#En>2}3A80^-A&NY+9bZB?Nzd`o^*iy zM!ICIL{^)&M+~jA<;Pauxj%MTVe3MoP20FXb}Tz7(Jh?jbR&oOY3U8^Z&Dfti^}dV zaZ259*e2s&zQsX|b=fu{48LV_`fv;#q;a`E6Gf+1e~$P$JG-6#_LO8n&p@D$t()#O z&rG|O)%U!p1&Kv_nP}dhfv0^G*|s@l&Efm)~HPw@%Z#veB}w4=@iHq0DZP5AK!<$H$lj0MD2;EE-!U96Og z*w=I_FLZCpyFr?JE2QSz@WP#EmhuwiIBeS%Q}+z)s?`%4DB>|ms;bv}=Pn?}%VQq( zMhK6PBCL7;n@+F!mu2gNbw{+IjTkXL@hpZx|AQ?h2)cvBa-G8lL*CcJOG)D^wja8! zOZNZx#FrAN%{fWjsV_|~1|xN-IAL_QA%tD-c5RB4I{H=>>)@hF#jd7$w7hD%Fj(8t z7)tR;S~KDhz)@3glithK5gAyy%kzz$QcvJEm3PDxvgVbo*_em!KJl;cEMxjAs}TEz ze!(k*C8JVyI*14(fY!MuXU{aHH69eTt*OI-{n0LHzP#EjKJOC4M(muw;{#tkKbPp`lB#!NKkcD1(XhR_+h+ppY^K5ujfM>`^L!S?WGHrKV-JL^o$ z-{>FV{5hlYjh17fbL9NgTJGDo3LYMGu;#&an)3b+<$GZ86$5 zC4daXBIl2A@&2hS7CZv++V9`@UY`ZCE3Cm>xvrPhyxiPnzrb`3bMM98mQrIe_lf{N zDRvw%oZQJJ?O6p_&b@0rI@lAMoe#Fx9=+qgFFIykU(~#|C&YP%C1keARQ%WE8?B9j z?Z8a=#`ZGX)wiJ(yp->}8k5=0uKCr^&>x5q>C0k03ZR%J^!DAJF6*S1_io#$s|z>N z%vw)j&~w-+6-Pgmo&6KZC|~gG`1)rvGjxhDD*|T+=-V5GklTj#eYeySzY~+4%a?7t zqnBM9uDW=k_d{htq)}LZLFVr6*CP|$1*HW1=_~TQOvhH@DtL(<8lf0o+oZs(f&#Kr ze!nRJw#n+d_baDIj1*kXn-HPjF9HsC1gFQwWNnkf5ysf=CbJ+OqnNGGO6|S?Qr5%| z!Gb4z*0KPIMy|J z^moZco}s1mH`Y9aU-8;9np~`HBzN6ajPHrh_{-JJ*1o?O6JSJnk9jfL3x~ocB>D8w zbmZ}+Qt^E6!-eP%VPyrXc|-*d{=6?hYYt}lqzoal#g`6$--5_36`ZKc_ZIRHd17{c z{)OxUJuR(Zunv+OskQAj2bljf9M+9M?-#Zo;6toIhe{pj5vBPxm+c2jh`t5%_m+2l zX2lEL`$2-L2j_DzZJ>E~yOd~qY?A;LIDWSc(e1r(foalz)JqnE!{NWkLce8wavJUF z`CxwSfzksqm*)oSouAe|S^`R12~#o7dzDI)IN6bN*`V>;aTfWgA0hKECELtPxa;I{ z!RJ!e$yG)iUOs!L+WB#sRM$mEmn(csd07=4JP{`=Byxk?4k%8e8-%=e3j@Ru_eQ_+ zANe)<@&Bf5d2lj3U_925B1s;C{~C%)gEJAQ{Oe)$#etEYoydpV=4USY8-Z3YcZ3olP%@EOFiG)lQlCHb5(F5Zf3Z?tYnR=~fI;i08sn z&^Ukz67l=@eMqL4M#~CYW+TW?`JcEG?y{VH+wj{)qQWNqRrBr{O*)f#s@0Ad|6Y!R zIgp*Wt$wRi1uL@Oc{nDoA(1I3>#6(Y8;Rx#cgR$j?q``9Q7){&tH-ENLl+uxR%o;p z6PFIVipEk)oN^Jn+Y8=g_lwz%m)MVvI^Wa9moQjaHb?9RBLYI`vobND=hH^5C`Kg5 zR60Z27yD*>A^MZnFNpoxwWr=&;7u&XXAq~xI z;|7kx?R@7arNf8R``Zc+41x4R3I&4wM_lc!bPTlYALeFjv`eQ&Uf{p9J@|jxd+%_n zOn_PC#?@8`a+>v#S3 zb^r6be%F02T}}t*yx*_&T#x7Daq)JaVDHHGZBlAP4jh>?Rih196sDv@M=o_<1>M#QR`aQuFJ$U;_~8b>{vb&^FHBCggjiq3>}+@OYQ~$0uHlcnYw^ zP~1lu%Z>aB|K(}A8Z@i${QMKw$z6=pT|dXI3dqb$%H2BumD$({T$=oP%?Mh}0=+EX zy895H@EoZaW^7#SpambhY{I_0y!@}f(3B6A=K za{!LP6djUXew!g$1~NK8Md097pA?vBv> zb4Gb^&Q2@U(*1(w9}!2=r5CXVWyA*NB3DacL1+yGv@adk819PE#+?xB0J zT|j-C*z=m)z4Ok1)Mbj(yqj|a>YBnneT!hkFhw-$nz<_g`60t3r$7@cZoF)XA9{<& zuw+!ZtfxMLKI11@6QH@k5WazhTgDLLG_84nlEA@wd7q-PaxjC+&vtwv%Qg^BzLGKU z5%XVY-JSnzKgC3kahEabdzc31S8=+be-}FDB4t=wL4(0|t8srGx~E$(j1fRcAU-YX z#-}^z2cJkTl)UQJWWOvwZuw5gi7W92hHMV&;+2&rv}olSTd1Blf9*9gom--sZOd0k zF$HFwPwax1?;J_YC0YHCjyHKpLkxG+@H_duBFVORYG#Lw0WBpB(a)kvj%UgU#M3+} z(dVkVw~EuhU}xS4!uiK+095^Rq5PW&gzRUYTcG^b4!jSyb`PKig`wVu#!g88`@%3} zG&GPaDJdbmkv7c~z({bDV)`mzd%pP+>3KJK9A7|SDp$}2{R?ROTfwwFwoN_ebcEJo z=rIi1YC^u3VX3`T+f)^-d=NR-UQ&&?g0NzcQ| zwF)r|=R-i;;tPys2=_2x2fKyyCD-^9&GJWIGR^pX*BntF zCj4tR%t;Xl&5rk=c^IRUZN(B7I3&-{yz&=9y6{)~cJbliHxbX|QHg6EsE^OCMMavBpJ3MLjl_ywU`$7vjff z`_08#9zs@?&};?Ge}>0wm6-~c~oRv9rZ7|gvYv!&SmCfHO$MpP3*s~WPkF`JY zOHx+WGR|!^FoBi9?KVc!$u#BEzTX2#tO+np%8mY+lwUaK{KhbA7S`@IA?1H@o0tdE z{rK?C==S?fGM)!%T^BMCz-9CYq;}>CiqC?8UdymEJnij#0DYPnDP+jTAf?NV=}XT^ zcGVhl12I0Kmtaj+klchoSaVvlUMAyljG=$PR7HRij2|OgWL>xVKvj*C;@7SyrW6H4 zgutzHcgn?dfsY(R_5+RW7~y#6<3uZ3UFSY&JXvtltUPo93a_aD5NYMUs3N@@SjPA( z*S^)5^PV7c*@Uf69m}*^73KfFe^nVDJ&}`Qi1KDf5?CWP~1=b8a zT$~(pacY0osXy!bz)A@6C`IxOM*n^}UBwyHs}|bHY`(#9Gd)o~$h1()1PdTZ*yh9Tj> z*ad)CwPAeW?d>}^)6cFhr3abJ159!ZNT$+aS#hs0jxEB?Pb% ztq5MiKdwY%#>8`xP`_3`kaa76liIHv^j{~ItDxL#+t+wJA8t7HUhy~a*DY^Ln=lw# ze_pLt*G=Y2rg!1ORg1k}ySWT>S(*bou zTMV&FvfEh;9ph{Nf8j6)LOS1UElDnek#+j^VSczg})PLG>*n&%f+L0)#4clw=oBJwR>Rk2bWj!oA9-bIlB7nd?v$kfzj3tI66!f@ANJua; zgMuf2M5a9Ur@;mSsiFj|e$cKO%|4FjT$9G=D}CbLvIa&I5MmNK_~o;&fU;P_EL2RX z9Z(-Pfa~sch0S!G<0lTYNT7SfAB_$7nY)5n7D~%@W-JQCN>qa5K9_D|2KUdbslN;l z|03m$$Xg~8xN5m2W{z@{L`9+;Zb=yUDJYTqfH8y&(TA2&qYf~JkU`z#msjJ2Xr3r7 zE$uDr*gwlc#qHoHY6Iiep=Kp0J<-usqMCp>Mi@w4Y;4!Z-@w$TE2IblTaEEr(~6$( zzPHipU>0W3vlUW+A;ko=qujT_YeME1Iu=N)9hFxWmYFHtDja3(&tZ9Z&)9dp%eZRi z*yur2{14ijY}B9sc4;Rm7oI~v_t(V4MR_p#n@^U$^KcRuF8?%HH zO;tfE?{F@Wd2(ls-1qRbH!dFjS1rbhMie}^?=*t;7~e1NQ-Drqb$2V-@sMx3Hfq&7 z72>u@y3GLnP0m6nzr2-|)zLs$(J%o{j*Tn zp{cyK&@Y$Bz0Qx>C>;9V!5Bqmf`SnArLCdX*Hw*-GEO|3pHeDtvG^uwX8-55Xq23V z0xOs)O@4O=M4JauuSi4$=E1((^lZ$aeE4)wd3pj)JGAL>_}p%7qbk zmykFdEH=W;bAGfNaQO1=PuT;|P>eE60xASCJxh_a0(;{bbr1_xo}XQPNQ`R^Rn-CJ z>K`f`q$6-j6zudhKLe_9e+s8ho6YA@ zwzglM<~T*s-m-=HGw{C?>bIaGpv*+iCV%i)WeYiT`mjy}JFe8%iYmYyr<%O#i_JB} z6*{JKvER$f1*N4@k-LDeXC%foS*UmxxM^$DKDA(+kbP#?ciUqbwaSJ|bIbLn9lZ5D zZPz0u<7*GuEH_q89eIwFGC$m$-X|g1TpJ0yKnw^iTiN8NFUn1N2O)N$lN!_ASAp4m z^>p+xuE6p7R{5J3>!OiuAsIgdt|4BX!HdnE8btI3fuJlYTNUwM_vdUHw7lz12}BW_E~l7XkU?GS3P3F>M#lu$k(>6 z6$1)IdNy1U@YpX}$6nZ_Q>huy-aq|74j)3JU@jDx{5ZWBrvIi9KRTnNE4ftq{*quu zj@^CUALB|#N(OI%-buTy@xv_|CIOyE-XxYr^k`y$IiA7ess~e&d+m36(Ayiu15vO| z46fecYV**Lr&WL<&hfmIf#q9eBor9Ucs(PdlE#gLxDiF{P~zLFw9IDphrLg zCqzDDT}QYze&eyy?j~=<(@+j{DLL;ABDi+Ts4uFv4JX?@d|M4v(8np}XV}ScESP0T zjD4lLkBsR{7$wY%0d3%?Il=azY_5(U!#VejuT=MtQut-eDrI>15s8Pc`}u@lXmN^* z!43r(z1*fIc`|P6VM@2)5ggW&=Kz&^#w8z;q~k0(Fs+jD?+klppR1HoQLJo{DR#Jb zA*6?lHKp9PChoGq)$omde@&r4Tk{do;yg+cve(wjo&@r3F?zfa4I^!xwp4J@nyRBY zxlf@(g755LK}|>JbMMeg`syrcJaCp$Dhdb7+I`tZcE%E@MI;F1$9T3540TAn=SIhl z+oHdkO}3S5q!@~B^9;&nNM;}_sl>i?hv z0AWymdb%+5zQx0N5R;N3L=gAw+L%V?^BS!G*a^wQKapR?Up(+{JrFc7CE#kCB*-Tl z<=mYOOQ)~t9DWw%Nq{Ipmz@pixw+MQ9<=SC=Yv?gR~;D1@zxS&pUT4yJX%!%`I`F8 ze2CPTk#XPU?+rN-!u>?m%^FsR znuc!HQcv6(#C9rbBXiw7I}a$2_o|z->No2Wy)Pmk@h%>mP+8m=QohFRouqA%nKj$7 zQ3m^ULcRd2gyy< zj~H&2Z4aK11B=+ZM^_rPipOr8m)$meO8o0a-IxpQU;lI&GQuZZK_5feAlXT z2*86qXQ_7^)OwWdbERN;s{Z%onb_h_gou3Wh44;l4G#|R0B$}9u+?S&TM87t52qQ% zbXYe!CgGqmAWNy*5T_K%nTzV$<~{riytJ$EJ+bZ@|;WiK54 zAmiUt1d{AOFP1#LfcNhu1D8vfa}j=R`x?)`C*Di{3x>j<+D{$Fkp^0r3IUm4_bs@n|bbKfn)JnAtxkR;{LsPBYai7TeGn!&U;-i_u{aoX*X+Oglgtz6tP3=whDLe0(cEKbW zcR^vP68z1`OwEf8xe$hZM-EQL+jur;mqxMg+c9dL`byOLFMQpXVz%Qttm_+RsNKcj zUGD#a%W5f+zC;v|noeJ_g7m zULMoJMQXTdOB)POs8-PV62V6Xeh~Jl|76&?$`C%i7S+2DCD6y}maMPKX)#>uq?V#! ze^$IDb*)i}~U#?JkHRER42f2SF)q_ge741ey5u17@W zulxFV#rk_sQ*ad?)z~f`8t*@t-XrKN$+?Q1)~;3PHD4Djz++52iJm%-8PaDN;vn3x zRLQNCPs?`oUCODDv8~Zl*=MW$QKPONjof|2|X_ zg~u|v(8xSLCwAiGwqR1}IBPxm^x&6pBzy5Q`C@&iVtuYK1-}k@iDV&4oo_b#w{(o> zOGxbME#a%%vAv0_(!bK=P;o};gQ2xvJLh z6#NWvSKJW@%%ytYDyFYlDf;q}dr=nq@#JknqSoj7eeoLiG&~<=mMk5n)UmD&>Wy0?&6^lQt}G1&N%LOpTNxi`wX3( zj+0kT4Lx-|o>6&DBs-mBxh2Dl~mA(FfUT!2yZI#oLILzl3x51!;n)VTPybJ@6Al%rZPL1r`Ah6xJ%!fZD4p<{GStF zFvxj^F_a}fPvlfue}+~h-;K`>`rtEhjb(d@@nQ53nZ-}Dx9*Yr>K+j*Zz7h-6m6-c zSo|YY%?x|qBF(s~dYpo*o{6rZE~0S7W7f*dWb^oqmf97A#NEDzKYN%z8mrDZGMrmm z^x)Qe2g`gl4Wp#5g&`N8)>GGyvF0?(%IoKm|1Fl+kAF({YI||H<9(POmSkx8avyK# z#?ID7gx>{>(Qa{yB-h!s?w@e0ldO6l^!Y;b=NVz%hSFbOJDJ1d6NeXGlD)@iQ*^Bq z^ZWBvexxP!(nVeK+`NJ8kP-7Qc}gm}AzEwsBQuIQKim1@BRai*n%XaStujTm>679J zp1iXA);zg$5@66qi2qFaE55{2#2eDT$3`*KAE*&dwEs>j9|9Z}KK9)T$(aYYi)&U; zq`PPxmqR-ug6{aOARC+jUm_*vFG{eE=>0qB+vdps)KWOn3=Dmp?x?!u*&}q4KJamp z%Szc^HzdK_Vpvn9usy+?b8Iv>t4V#XrA2&(6fcgv={B#&E4w3^rH@{YM?H(3tUrn0 zlSJxBVM%InN-EzgYh-jptWW)0S4ZL3SX`}eq{u=hD|ne&#pE02@8_gGhRvE_pJ1Jm zzIkC{`vgg@Bl%Z6i6PBbzzQXqEuK_zcZg$TVlw^rBq`@uJEKs7MZS@~g~jl|6i3M& zQZC-@AZ13u$m*7H9qmn{m&DQ&q(hAq?bA%SUDUW(kFQ|{!XSrWeO(rtQJFq~)}JJ; zs3o;HCTckbsge8nWZdai{TO{B{b=gYj{r5j@g4UvD4fdwFz7G zoPx!A?>c5R5G%bTBuX4AcyxP6?4{RFb=!zFCRO?8X*!3cCZEL{q;ld_Qge~?OV)0- z)MyTrERu~4H-zuWw%Aw0O0MC8yejct$B}?5xxJO8#TPej81;3jSu4fs`2IByd#_A# zm{oQxz4Yg9SINYc${A7O`HHTj!AG2q^}$H9sObl1LRjKFn4`(ydh0XOS#8lsQU|{a z6W3XuHVH2g94ripos_w}JY|kvQ=!dy7V)|DGSPGhUzAVaOe4!ns_uhleiS}t3FbED zs`ge2e+E>McRVjmYF%{@Ol(VQm{(pRjO!2y-_~p!dVjl1`%Cz$ss;}uyG)AuIv1M6 zbJse%Tb;Qj0kZ~LN&+tv354+Qlah^$MpGIXv)9;mwBh)Vu}UQCS3PZB3{}(lpnDiN zStU>t{xXEm{`eYmoelfD3p8@6jm)JZS+!MsbO~Z@qNkbfwsiL* zL;gp#_XjeBj*IzBg4We;i`I{g8MUb_>#9AncCWq}XHyTlDSUw+4>JyrX@%cCYfrx0 zm=kn~|0>r8briWm@-}wRBFmqi4W?jpZRgH+asA&%1ij3P-_%l5$$ieON|0uq8)f?w zYhQb9yxwul87MNNE6t_NohEe;2Xr)YUei8J-KlLn#Mp8TJ!&tP^@8Fr!pZY?6FctM zesYe!a+l|^B-c}tpJg(AZVY>dS08ch+0@TrzdV6ECb+fNM7*j0x&K#a39cDWJs3Q0 zGBE9cmAcTSlH9CF=@nt;e)cv6$LmqepKm!qi{IV{{kkVq;&9#$G^#kHju%9jNJDZR zRYXw3ahV9?RO;NeCFu`TO=Z}JOpJ?61<}n7!iRKOW&Gr9a_m_bXn9YreY+UGDTKe* zNEbh3oq6frCa$(gUE6Ik!)uQXFx%!?BmoK~ElXf#VYzN!C&~35C$59W#xMf2XpXQK zJXq!li71<+wNrEJpFJPSD^gUAcz455vN^eJ#lApt-zxhFf zYvVr87|`sGAoc!M-TgtOKukE|kw10U>2vbNBY)bEQM%6WlHy=^yv5L$hy-r%v7_rd zrC}p0=@~|BpZIn&J&HzZ(8i6?=Ts|JHH;hIs>LDT(80cxf%%fSx=-UbWNo}|6XBjH zo`g8MecgXpS%20Par^oW%f&(_ZtlD-iB}5eVP)7ZK|!y|C$3gC<;E+YM%?{Ki^jQb z`UJP@&92I=+xXAz-g^0pVS>jJpX*oa2djK5IKSrv(OQwMqFz(&R_fFyzkRJl3o~Ws z;ko1xCf2*tb$6EKw(8TGk6Q{dzb^CMgv?#J=C{=QEW(U`9G)=2& z7eWg^R#M-lZEkACqnVuywk$03=VrC!EMuvo$UA% zM7sLZs`>Lw%==SZ!kl(UDew^4rD)q6BHDXjV6)i8EVC->85+(P)Tb)`d>bX7*g?-e zmQymPe2+lQv;p<9gl@@xA@Wmqnba|R`S zQuj+KiAs?dPeTkIl>SP8+@wo;SLf}#93REs(%fz|gXLOY%?hsg$nD^K2HyIW@L@w~ z)Z~!`fADVM{YJ(o2d#uHlE3y`m-am6mW-NX_cVFNvwqj{agJq&Hdy5sD#>{GMO0_! zRrMwgSGh!Sow%v_SuExFQkFi*jp^PY!aEQcG2~t>LB=d^di4aGB?OAb2ugFC)yvxP z49*sb45>DJRWMi2oL!s5&9Vu5W4uB%&#_n%a?-4FKjN%epO}~t&Q2O}BeZy-t5K;I zYE4y9EBmj6oSNZMu9cuZ53#D7z0ns`ddlj3@PR&CJ6q;|Y*w84nl9RmQ_b3>`)wg= z?k~g39;xdr7h1>9)>}(Rx{0-Ri@q5cQzLeZi(!vej+hq}Dm}bO+UqS04_+}<3h z&ZDuZzB(voy=HE7lJ zc^W-=8_tq{rSn%@6C=DPu6idp4&R@aQ^q`08bv;iUI^hkUUPg-!;9#|OYCLQH>-8e zS{nRtszS*wr;^0n%K&FtTUco9?}{B?pXXLu&GLz(#WHS>o@`g8)9;QCb|S4_5&M0{ z6Os2{9EoKT5x&LFjJW=dEIZpW?t0>>A9Y0T@U7r{nwq6X4kvAeS0DNF^d+-R^1GtI zE55or7ni3kB2;jF#d~^(BijMl zbp$6QQUG?t%RVVpEwCuLT$eK@i37WFr6(Vm*=s7l#nF%*na*YB&Fv&GhO+|UgbP{a zg`J*-9gE?b;v9h)w?!-GKVbecM*aLMBC1U|@?(#*Du>6Uk2EF^p9*@VFH5}K-9U)X z;Qe;2Blpw6OWd|U78=DwF7e`PCf3=LDUzzFmB9QAiyp&|Z6>rw?>L-|XYOy$#ceQl zJ6o4V(nMXvmGY`sY>*S;73JMIx(A7{?g7!nvK%ki0Tok3>ypf(1wlI*2)t0QCyzeTexG} znZA@hBrf%sYN4gTfVv;G8Pe#hfY+wyqZ;4B#JSu&+p*aFfiDI4uV;04u53rrN`b;> zGkSsQToeR$N`=$HFTC?^4?!~hJ;+r8o~^s582hHFC*v`FH*EDfOC1w)WLwbqTUGxt zDjb%tCXXs4QH}$|fs8jlGEOpl7Y=%Nl}OogQBNyNtk{Z1zTPVF=M4mL{5oC^Hj~7w zb*2%R8oMPxe9E;8Dz*N^8}X_YN9z}L*)scMOZTvI3HG+bQjNLoXZgIMo{iSUO?JzS z%}{0Ion&*b3jgs0>B8T)1d^ycWets#8Ug1`9XY5rL8bf)NH(B-s7@432K7GAG^hR| zx;r5PR=h6Ig|b}WX9ATB72D$r>oSxj`0#R;$ICRU887(_QNG&kJeZH{Mwyw7>=Tt z-p7lf`%^1@DD=kBm+Y`p71%OJa@6%TPihz0i>`pd~abppN~6bM?3HMmrxJ{g4$0O9C{=h&Ok7qer~;*m5=4~eIk%-Og4d?Fx@#XJ|@a zfmk<=gfY|bqP=?WBBe`W6pj9i!xFeu<{<(?DL#X+ry&e!Sh*uNG55K3+NWJEC4%deA=cv0ni;pP@5#CrbBrZtZ(+G|uuAxrk88KHP zwzRa0a9A3tOQMway>v%3mgAL-ZpR6Z?BPbaA(f*t%L%sLc>8z&N~FBtH?2Bw_XOQL z>H77u9$QvArtx%0>o;r)l*xP524??|b#qsZkU0+Cv)qE@+vEFI8=c5#GgfV47o?6x z!S6aj@tGqW75b)V@S>F%yk7WD9Ul6ez49Hin$0$2@Zg0ykt3iI)+&bNdnS4P6V>$Y zfXC6YeWl$0E&^dZ7Ar9`n)QKFo7@FCoEw_mjuqTc7+u^TJd>VYNa}*rY*Z?k(fks7 z#77t%Yj&cf!Y==%H8hNw5z;pA1S((yCX$5Y7rwDKUn%vCs6OrD*dEnaVt~vXc6axZ zEng)H{T-9?W6Kawqx0*{He2o+J;=z}b2|gBwY6@h;z75q#+<=H<=#Z+AVI*^!}o&E z@;T&q{zVPj(iBePqL{Jz$+O@9HHtRIhn-^}Kb2uN^m6&Uox3RwQ@{qwkP1M(<^niV z6F_$PKZVXO6uu}I2Pnxf$l5SVX_f!R=}qxI(Sg0T_ua zK-GWN*em|f@n1(%$4yqXbq`*phvERkd#|YT3|o|S9Z5v zx~08`v-Ey2gJZ$NS>8;y*I0;_{wM#O_J_?iq8a<~;d^gW3pts0iGOq=pQh+TUeOFc zUP%RGitF7y^dZ<_FXAK(K>;Rl?1gDk7Jv{NG2@Wrc|_v6oV4T$J3_h2{*iW-EL=|% zl-q$#K^A&_Du9^Nu25%!J>WN7@d#*s=KJ}%%Eg07s@oQo>+krSB?msvSKYVxRx{5> zfk%l!st(|49A<;Gg}U|X>?WUc0oWi(|Jn9E2JWZ}H|M%HF>3*GTSs6Zqf=6v)n<=@ zJcR*Db*KA6{ZJL8mC`Et6_x-Z?V$pDpDM;GGBEkpVB(1x5gY`9%;6Q?rs!LgO_>aZV6S>3a1UN5RxJLMq8eAj3r+9`~Ca(vWb^+ z0|LpK3p;yzdti=1dW?sQdn{>hd2er=j~f;*v}mAUWvkq~iE&GQ#M9GJ@-K#q9O>-D z0xD7k?xYAn$3(86t4< zae>^uhai`^YS!M2+h=Hm+NkINARb%I<^2T^o{gQ|8av)P7Xb#Hqr*NMRV%9yTC+G^ zrvX3tlP3fFB7>>)BbKaHb9(^Fg9!G?lrVI;3^Y@ zygcVifh9yFOz5m;#$#VMK06O~v??H(FY=vB(I;glS|9mNPEJArGp5Gtp}q>&e+q$4 ze7-Rm92+MSY?gUg{)X%v8}BDPxQJtD{oB$GcT&bc!wQWq-pXj)KdalUS&$dYQ0h%^ zOau7;K4!DSX4n+$D`h@g_9_|xKaj(9x2W!S!udcj$*j~+V$Yw~`$QR^gYcc8TXa48J{5mjn zbc4HO;a^<>ej!#OO6lL=iKl{+A%(l`k#WrY{C$iNSX)VYn%L$4Dvp*sO$f#mSpNTB z?DVGNEl;fTyV}BU7$-(B@uQ@#o5=dxTI) zKl*xn(Yxu-*<&`0t^R*7NRRSTTXLclc-1anZkp4>_NKu7-@FSTnL5cg#s2H9aIX+T zEC7%Ho5J(ETg631@;S+DDx4!DZH)v7#La5+5$Pn?ZdtMW5!AebQJ5u&7HYIkOu;wk z0JcNN*~a~q2K&B&7qjQdCi-@zdR`u@>O$uc5}t+n0w?|I6mBR6cJzS6`Q&KU%WJ%T zZdlK_dQ;9D1kYAzPUnB0Q*34-h_4j0>ZZeKpx%6h&cJ*wf9X}K8vTgZs<3enZCNjm zn?bj@U7=Q`GQQw$$y3Tc?-Z{&-*P_#wegwUUzj_i^%Y5*)4SkprK+u6P*%2Wh0Xog zPOBO$EySv)~vZ1K8S6F5hrfhsPrJfkMKU+0)H8g_@)6 zP_I&2uUI1|$XV z^G^{~y*~I;#ejTg|I2Ft_?!X18~Ur6@$?p`VKaby4`r3Jj?$I0jxc$hskHZ9?26II zHZwol=`&j$q(iN&gm)|qL`YB+V(j630!V}OQ~ef7*^9r_76gzPT}QOI0Ca)Yy_#X= zH2Fb%nUBBncMvD^ypEk8FI-U5uu*-r^iXOL&R0&Sb;?PPFoD~B`ekn;it5aZqhp zpk$|J3j*uzH>>ZiQpM5=?EbpwL3!M*uQvc9IDtinDJie3r=5oQw;qjIHJ@ai?Z>)+ zi(ollQ$6FZ0y3wG#>92!O>U0o9{Z@Av2)qT#r-J_!Br> z-Gar(M{6?Z3~*du#p$OhKFoBUc~R6sbzWGM>=x3##jnStQ8>I&J^di8BO~ArK62hd z5GE#nrsj!NPLEN5JyywMVq>!0 z@jiKUiJ5g+Z7jbF6FQQViDManzN_@eLFLNIDs$){Vd&UJV`hw*aeQ-~t6o;+$o$mR z(ZQiJDY3v~pQ0EPZ7JUVdahMrn?}n(8e;x;UMxZIv?h8vLs>HKPGscv3EXwU+jYzfN47}yGqC)Z~Oq8TJsYHU1J_Gg__ zAViV%XxKJ_8Cdz#R-l}$uc`T|CMjwmmKHV;U32s7+FioC=%;;27_Uf@R`|t3gD2B! zFEYe8%G5fjT)sts4&%U(fw6 z3~S!%>F!oJo9Zu-0_RQ=#mC45_J#^wyH^MW)Izlab<~voPw6SsgzR)Bd&T9;C1@C) zmZpV{HMdzI884lZXZuqgaZa-y&b^;q0{4(!=imM_Ox_pU=KDqHQSguPcEIcJfzA$F z0?roe;{q7yap%I{*Wc@zc7Y5A)kzZ;$wY5j&}RYMY&x9Y6wmjsW}-sKhJ>-(V)Z_~ zE=O`2wFe|TSrCPBLj%?0Y8BG@)gbocZ=i=uCv^jj4iMNx-vIs%eI1?j$%KUHV{>y0 zRh>xEz~PZG3+T`<-5Ke)&^Mp{(rU6o%6Zx)=eLei`~&%?vaqzbiZs(eAYJZM>{_Fj z6X^P=%UM}zr6cPuV7Y8>(=u2g6AjCy23~i2csA>+sf6~^#r@bc znwrxiJ!-v6Xz5JGZP|a7s-gIqY0kQn zTl!FGuSparb$Cv_Ia+uhx7!E77c#kw4&M64jT_ikd_+ne5d7X3QWVtGRCWOynIA&N zB^e1vV5Lbf>EWp-UcaK1U|4ig%MHk)kQhqO68bk#^^ZNGb$o;eW`5m}rZ{5?9| zN>Ku^f-ZVenFW>vtJ$LYJLeQ&H9I5_nj86AE|8bG_rznM5Y80Z{pakyPg zi04ZXBB}~Y4j(|#SjD$m`j6I!6e?ZOjF;={7HxSJfA+>0|Jm`m3~tE=3pt)es|+h@ z#&KVgO-)%jeIo9sl32qdG$e>dcKQSgfRypZ+wQJ8e+{$4?WF|Axyx+5xt=Er7HX2&7mg8E9_5hm&?+;t_;yZlGm9po24I6 zxN(EYifc0*`}CxKwY%Uq-o6aN2|G^rj7DI4O@B2qh&6I-ZKNybb2G z{7b6}+Vjlu*I#*geaU4$^nu}E5IK7eS1*A!|z<2xY)4Ih-8AurUyGcPA z>Lwo_-|im~{MW#|Wmi8vX*%oSIO8Hjjsc*FKdj2dxUmo$W!!l5@5%oMVWSP__!627 UpQLh~{>6JzV)CLz!UpgE8~Qjqi2wiq literal 0 HcmV?d00001 diff --git a/flow/docs/images/openroad-syn-qor.png b/flow/docs/images/openroad-syn-qor.png new file mode 100755 index 0000000000000000000000000000000000000000..61264521793b4f7c166ee2931b813c020864e052 GIT binary patch literal 161915 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

Xk5g^7fYZH_-=Y%DN0ClXOSb7jLN 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�$@rMzBzmpRb$rPj$}4< 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 literal 0 HcmV?d00001 diff --git a/flow/docs/images/openroad-syn-runtime.png b/flow/docs/images/openroad-syn-runtime.png new file mode 100755 index 0000000000000000000000000000000000000000..cd5f62a2aaba5771ac5b4b735b249408dc826b5f GIT binary patch literal 68527 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 Date: Thu, 16 Jul 2026 19:23:28 +0200 Subject: [PATCH 08/12] designs/asap7: mark slow OpenROAD-SYN designs manual-only, public qor targets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move cva6, swerv_wrapper and riscv32i-mock-sram next to ibex in SYN_SLOW_DESIGNS: their OpenROAD-SYN runs are too slow (or unfinished) for the aggregators, so they are excluded from syn_test and the QoR graph while their per-design manual targets remain for reproduction. Make the best-effort qor targets public so the platform-level genrules can consume them. Co-Authored-By: Claude Fable 5 Signed-off-by: Øyvind Harboe --- flow/designs/asap7/BUILD | 24 ++++++++++++++++-------- flow/designs/design.bzl | 3 +++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/flow/designs/asap7/BUILD b/flow/designs/asap7/BUILD index 36990a7573..39cb48a568 100644 --- a/flow/designs/asap7/BUILD +++ b/flow/designs/asap7/BUILD @@ -31,24 +31,32 @@ SYN_TEST_DESIGNS = { "ethmac": "ethmac", "ethmac_lvt": "ethmac", "mock-cpu": "mock_cpu", - "swerv_wrapper": "swerv_wrapper", # large; SRAM macros - "cva6": "cva6", # large; slang include dirs/defines "gcd-ccs": "gcd", # CCS liberty "aes-block": "aes_cipher_top", # hierarchical BLOCKS - "riscv32i-mock-sram": "riscv_top", # hierarchical BLOCKS (fakeram) } -# Designs whose OpenROAD-SYN run does not terminate in reasonable time. -# Deliberately excluded from syn_test and the QoR graph so the -# aggregators stay runnable; their manual per-design targets remain -# available to reproduce the problem, e.g. +# Designs whose OpenROAD-SYN run is too slow (or does not terminate) for +# the aggregators. Their generated per-design targets stay tags=["manual"] +# like all syn targets, but they are deliberately left out of syn_test and +# the QoR graph so those remain runnable; reproduce individually, e.g. # bazelisk build //flow/designs/asap7/ibex:ibex_core_syn_synth # # - ibex: sv_elaborate/synthesize/repair_design complete in seconds, but # report_metrics ("Report metrics stage 1, synth...") spins in STA for # hours (observed >2h on 48 threads with no progress). -SYN_RUNAWAY_DESIGNS = { +# - cva6: synthesize itself takes ~73s, but repair_design -pre_placement +# was still running after 10+ minutes when the status sweep was cut +# off; not yet characterized to completion. +# - swerv_wrapper: largest design in the suite; not yet run to +# completion under OpenROAD-SYN in this environment. +# - riscv32i-mock-sram: hierarchical BLOCKS (fakeram) — the syn variant +# first needs the block's full PnR flow for its abstract; not yet run +# to completion. +SYN_SLOW_DESIGNS = { + "cva6": "cva6", "ibex": "ibex_core", + "riscv32i-mock-sram": "riscv_top", + "swerv_wrapper": "swerv_wrapper", } # Explicitly listed manual tests DO run through a test_suite (the manual diff --git a/flow/designs/design.bzl b/flow/designs/design.bzl index 6b6295db4f..fd8cf979ff 100644 --- a/flow/designs/design.bzl +++ b/flow/designs/design.bzl @@ -112,6 +112,9 @@ def _syn_status_targets( deps = macros, stage_data = stage_data, tags = ["manual"], + # Consumed by the platform-level aggregation package (e.g. + # //flow/designs/asap7:syn_qor_png). + visibility = ["//visibility:public"], ) def design(config = "config.mk", user_arguments = [], user_sources = [], local_arguments = []): From f5fa5fd10b87d13f7b344ff5dbf2e80c3835b072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 19:28:47 +0200 Subject: [PATCH 09/12] docs: regenerate FlowVariables.md for SYNTH_LEC_CHECK MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Øyvind Harboe Co-Authored-By: Claude Fable 5 Signed-off-by: Øyvind Harboe --- docs/user/FlowVariables.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/user/FlowVariables.md b/docs/user/FlowVariables.md index b297be9ca7..b96c57fbba 100644 --- a/docs/user/FlowVariables.md +++ b/docs/user/FlowVariables.md @@ -302,6 +302,7 @@ configuration file. | SYNTH_INSBUF| Insert input buffers on top-level input ports during synthesis. Useful to disable when doing parallel synthesis and concatenating netlists later as we're generating netlists of submodules.| 1| | SYNTH_KEEP_MOCKED_MEMORIES| When `SYNTH_MOCK_LARGE_MEMORIES=1`, setting this to 1, will keep mocked memories (not flattening them). This preserves some of the access logic complexity and avoids optimizations outside of the mocked memory.| 1| | SYNTH_KEEP_MODULES| Mark modules to keep from getting removed in flattening.| | +| SYNTH_LEC_CHECK| Run a formal equivalence check between the input RTL and the OpenROAD-SYN synthesis netlist (1_synth.v). The RTL side goes through kepler-formal's experimental SystemVerilog frontend, which does not yet support all RTL constructs, so this is a separate opt-in from LEC_CHECK (which auto-enables when kepler-formal is installed and compares gate-level netlists only). Requires KEPLER_FORMAL_EXE.| 0| | SYNTH_MEMORY_MAX_BITS| Maximum number of bits for memory synthesis. Ideally, real RAM or realistic fakeram should be used for RAMs much larger than 1024 bits. To temporarily ignore the RAM concerns and investigate other aspects of the design, consider setting `SYNTH_MOCK_LARGE_MEMORIES=1`, or adjusting `SYNTH_MEMORY_MAX_BITS`.| 4096| | SYNTH_MINIMUM_KEEP_SIZE| For hierarchical synthesis, we keep modules of larger area than given by this variable and flatten smaller modules. The area unit used is the size of a basic nand2 gate from the platform's standard cell library. The default value is platform specific.| 0| | SYNTH_MOCK_LARGE_MEMORIES| Reduce Yosys inferred memories larger than SYNTH_MEMORY_MAX_BITS to 1 row. Yosys will generally infer memories from behavioral Verilog code, whether the memories are in standalone modules or instantiated within some larger module. fakeram and empty Verilog memories(blackboxes) of memories will not be inferred memories by Yosys and are therefore not affected by this variable. This is useful and convenient to separate the concern of instantiating and placing memories from investigating other issues with a design, though it comes at the expense of the increased accuracy that using realistic fakemem would provide. Memories with a single 1 row will of course have unrealistically good timing and area characteristics, but timing will still correctly terminate in a register. Large port memories, typically register files, will still have the retain a lot of the port logic that can be useful to investigate issues. This can be especially useful during development of designs where the behavioral model comes first and suitable memories are matched up when the design RTL is stable. A typical use case would be Chisel which will generate a behavioral model for a memories with the required clocks, ports, etc. in addition to a computer readable file with the specification of the memories that is used to [automatically](https://chipyard.readthedocs.io/en/stable/Tools/Barstools.html/) match up suitable memory macros later in the flow. During an architectural screening study, a large range of memory configurations can be investigated quickly with this option, without getting bogged down in the concern of how to realize the memories in silicon for emphemral RTL configurations that exist only long enough to run through the ORFS flow to create a table of some characteristics of a design configuration.| 0| @@ -345,6 +346,7 @@ configuration file. - [DFF_LIB_FILE](#DFF_LIB_FILE) - [DFF_MAP_FILE](#DFF_MAP_FILE) - [LATCH_MAP_FILE](#LATCH_MAP_FILE) +- [LEC_AUX_VERILOG_FILES](#LEC_AUX_VERILOG_FILES) - [MIN_BUF_CELL_AND_PORTS](#MIN_BUF_CELL_AND_PORTS) - [POST_SYNTH_TCL](#POST_SYNTH_TCL) - [PRE_SYNTH_TCL](#PRE_SYNTH_TCL) @@ -362,6 +364,7 @@ configuration file. - [SYNTH_INSBUF](#SYNTH_INSBUF) - [SYNTH_KEEP_MOCKED_MEMORIES](#SYNTH_KEEP_MOCKED_MEMORIES) - [SYNTH_KEEP_MODULES](#SYNTH_KEEP_MODULES) +- [SYNTH_LEC_CHECK](#SYNTH_LEC_CHECK) - [SYNTH_MEMORY_MAX_BITS](#SYNTH_MEMORY_MAX_BITS) - [SYNTH_MINIMUM_KEEP_SIZE](#SYNTH_MINIMUM_KEEP_SIZE) - [SYNTH_MOCK_LARGE_MEMORIES](#SYNTH_MOCK_LARGE_MEMORIES) From d9edaaadda82090f0f16f72bbde5a2036411b3c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 19:32:33 +0200 Subject: [PATCH 10/12] patches: add DCO sign-offs to the bazel-orfs series MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Øyvind Harboe Co-Authored-By: Claude Fable 5 --- ...synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch | 4 ++++ ...flow-emit-metadata-test-update-chain-for-synthesis-o.patch | 4 ++++ ...update-copy-only-rules.json-in-the-orfs_update-scrip.patch | 4 ++++ ...design-caller-extension-hook-for-per-design-status-t.patch | 1 + 4 files changed, 13 insertions(+) diff --git a/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch b/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch index 10e078e2a4..32e6271bb6 100644 --- a/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch +++ b/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch @@ -3,6 +3,9 @@ From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 16:14:51 +0200 Subject: [PATCH 1/4] synth: support OpenROAD-SYN engine (SYNTH_USE_SYN=1) and declare 1_synth.json +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit SYNTH_USE_SYN=1 in the merged arguments switches the synthesis stage from the yosys flow to OpenROAD's built-in synthesizer: a single do-1_synth @@ -20,6 +23,7 @@ orfs_test: honor the existing cmd attr instead of hardcoding metadata-check. Co-Authored-By: Claude Fable 5 +Signed-off-by: Øyvind Harboe --- private/rules.bzl | 176 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 131 insertions(+), 45 deletions(-) diff --git a/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch b/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch index 9e1052f44d..056733a32a 100644 --- a/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch +++ b/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch @@ -3,6 +3,9 @@ From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 16:16:38 +0200 Subject: [PATCH 2/4] flow: emit metadata/test/update chain for synthesis-only flows +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit When last_stage="synth", orfs_flow() now emits the same generate_metadata -> test -> update_rules -> update target chain as the @@ -12,6 +15,7 @@ synthesis-only QoR gates such as rules-syn.json for the OpenROAD-SYN status suite. Co-Authored-By: Claude Fable 5 +Signed-off-by: Øyvind Harboe --- private/flow.bzl | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch b/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch index fa3b2b9c55..982007c716 100644 --- a/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch +++ b/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch @@ -2,12 +2,16 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 16:35:57 +0200 Subject: [PATCH 3/4] update: copy only rules.json in the orfs_update script +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit The update_rules stage's DefaultInfo carries update_rules.args.mk next to rules.json, so the generated cp had two sources and a file target: 'cp: target ...rules-base.json: Not a directory'. Filter to rules.json. Co-Authored-By: Claude Fable 5 +Signed-off-by: Øyvind Harboe --- private/flow.bzl | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch b/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch index f6660dc742..e3c5bba40e 100644 --- a/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch +++ b/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch @@ -15,6 +15,7 @@ plus best-effort QoR reporting) — without orfs_design knowing their policy. Co-Authored-By: Claude Fable 5 +Signed-off-by: Øyvind Harboe --- private/orfs_design.bzl | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) From c807b02ab3d1d300ea97e74e4f0254049edd5f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 19:34:06 +0200 Subject: [PATCH 11/12] designs: hoist qor sources filter out of the loop (review feedback) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Compute the RULES_JSON-stripped sources dict once per design instead of once per qor variant, per gemini-code-assist review on the status PR. Signed-off-by: Øyvind Harboe Co-Authored-By: Claude Fable 5 --- flow/designs/design.bzl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/flow/designs/design.bzl b/flow/designs/design.bzl index fd8cf979ff..ca5fbb2c54 100644 --- a/flow/designs/design.bzl +++ b/flow/designs/design.bzl @@ -78,7 +78,8 @@ def _syn_status_targets( - a best-effort _syn_qor / _yosys_qor pair whose qor.json outputs feed the syn-vs-yosys QoR comparison graph. """ - syn_sources = {k: v for k, v in sources.items() if k != "RULES_JSON"} + qor_sources = {k: v for k, v in sources.items() if k != "RULES_JSON"} + syn_sources = dict(qor_sources) if native.glob(["rules-syn.json"], allow_empty = True): syn_sources["RULES_JSON"] = [":rules-syn.json"] orfs_flow( @@ -108,7 +109,7 @@ def _syn_status_targets( # filter; designs whose synthesis depends on user .tcl hooks # may fail their best-effort QoR run and render as FAILED. arguments = arguments, - sources = {k: v for k, v in sources.items() if k != "RULES_JSON"}, + sources = qor_sources, deps = macros, stage_data = stage_data, tags = ["manual"], From a24e94e29e1de695d10a252a40aa7c63264a8b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 19:46:02 +0200 Subject: [PATCH 12/12] designs: gate the syn variant on rules-base.json, drop rules-syn.json files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The synthesis-only QoR gate now checks the synthesis-stage subset of the design's regular rules-base.json (checkMetadata.py --only-prefix via the new metadata-check-synth target, bazel-orfs patch 0005) instead of a committed per-variant rules file, so the 18 rules-syn.json files are gone from git. This also makes the gate meaningful: aes-block's SYN run now fails its gate because its area blows past the yosys-derived reference (+157%), which the self-referential rules-syn.json had masked. The clock-period plot consumes the generated synthesis rules snapshot (the syn variant's update_rules stage output) through per-design filegroups instead of checked-in files; designs whose SYN synthesis fails outright are excluded via SYN_FAILING_DESIGNS. _syn_update is no longer emitted — it would have overwritten rules-base.json with synthesis-only rules. Suite status: 10 pass, 1 QoR-gate fail (aes-block), 3 fail to synthesize (mock-alu, riscv32i, mock-cpu). Signed-off-by: Øyvind Harboe Co-Authored-By: Claude Fable 5 --- MODULE.bazel | 1 + flow/designs/asap7/BUILD | 75 +++++++++++++---- flow/designs/asap7/aes-block/rules-syn.json | 36 -------- flow/designs/asap7/aes-mbff/rules-syn.json | 36 -------- flow/designs/asap7/aes/rules-syn.json | 36 -------- flow/designs/asap7/aes_lvt/rules-syn.json | 36 -------- flow/designs/asap7/cva6/rules-syn.json | 6 -- flow/designs/asap7/ethmac/rules-syn.json | 36 -------- flow/designs/asap7/ethmac_lvt/rules-syn.json | 36 -------- flow/designs/asap7/gcd-ccs/rules-syn.json | 36 -------- flow/designs/asap7/gcd/rules-syn.json | 36 -------- flow/designs/asap7/ibex/rules-syn.json | 6 -- flow/designs/asap7/jpeg/rules-syn.json | 36 -------- flow/designs/asap7/jpeg_lvt/rules-syn.json | 36 -------- flow/designs/asap7/mock-alu/rules-syn.json | 6 -- flow/designs/asap7/mock-cpu/rules-syn.json | 6 -- .../asap7/riscv32i-mock-sram/rules-syn.json | 6 -- flow/designs/asap7/riscv32i/rules-syn.json | 6 -- .../asap7/swerv_wrapper/rules-syn.json | 6 -- flow/designs/asap7/uart/rules-syn.json | 36 -------- flow/designs/design.bzl | 17 ++-- .../docs/images/openroad-syn-clock-period.png | Bin 81225 -> 76320 bytes flow/util/checkMetadata.py | 15 ++++ flow/util/utils.mk | 18 +++- ...enROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch | 2 +- ...ta-test-update-chain-for-synthesis-o.patch | 2 +- ...-rules.json-in-the-orfs_update-scrip.patch | 2 +- ...tension-hook-for-per-design-status-t.patch | 2 +- ...nly-QoR-checks-the-synth-subset-of-t.patch | 77 ++++++++++++++++++ 29 files changed, 180 insertions(+), 469 deletions(-) delete mode 100644 flow/designs/asap7/aes-block/rules-syn.json delete mode 100644 flow/designs/asap7/aes-mbff/rules-syn.json delete mode 100644 flow/designs/asap7/aes/rules-syn.json delete mode 100644 flow/designs/asap7/aes_lvt/rules-syn.json delete mode 100644 flow/designs/asap7/cva6/rules-syn.json delete mode 100644 flow/designs/asap7/ethmac/rules-syn.json delete mode 100644 flow/designs/asap7/ethmac_lvt/rules-syn.json delete mode 100644 flow/designs/asap7/gcd-ccs/rules-syn.json delete mode 100644 flow/designs/asap7/gcd/rules-syn.json delete mode 100644 flow/designs/asap7/ibex/rules-syn.json delete mode 100644 flow/designs/asap7/jpeg/rules-syn.json delete mode 100644 flow/designs/asap7/jpeg_lvt/rules-syn.json delete mode 100644 flow/designs/asap7/mock-alu/rules-syn.json delete mode 100644 flow/designs/asap7/mock-cpu/rules-syn.json delete mode 100644 flow/designs/asap7/riscv32i-mock-sram/rules-syn.json delete mode 100644 flow/designs/asap7/riscv32i/rules-syn.json delete mode 100644 flow/designs/asap7/swerv_wrapper/rules-syn.json delete mode 100644 flow/designs/asap7/uart/rules-syn.json create mode 100644 patches/bazel-orfs/0005-flow-synthesis-only-QoR-checks-the-synth-subset-of-t.patch diff --git a/MODULE.bazel b/MODULE.bazel index 0b0fe85780..2e5ab2fe0c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -119,6 +119,7 @@ git_override( "//patches/bazel-orfs:0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch", "//patches/bazel-orfs:0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch", "//patches/bazel-orfs:0004-design-caller-extension-hook-for-per-design-status-t.patch", + "//patches/bazel-orfs:0005-flow-synthesis-only-QoR-checks-the-synth-subset-of-t.patch", ], remote = BAZEL_ORFS_REMOTE, ) diff --git a/flow/designs/asap7/BUILD b/flow/designs/asap7/BUILD index 39cb48a568..0e18cbff5b 100644 --- a/flow/designs/asap7/BUILD +++ b/flow/designs/asap7/BUILD @@ -2,17 +2,19 @@ # # Every asap7 design gets manual _syn_* targets from the config.mk # DSL (see flow/designs/design.bzl): a synthesis-only variant "syn" flow -# with SYNTH_USE_SYN=1 forced, a rules-syn.json QoR gate, and a -# best-effort _syn_qor / _yosys_qor pair for the comparison -# graph. This package aggregates them: +# with SYNTH_USE_SYN=1 forced, a QoR gate checking the synthesis-stage +# subset of the design's rules-base.json (no per-variant rules files in +# git), and a best-effort _syn_qor / _yosys_qor pair for the +# comparison graph. This package aggregates them: # # bazelisk test //flow/designs/asap7:syn_test # bazelisk build //flow/designs/asap7:syn_qor_png # # The suite deliberately includes designs that fail OpenROAD-SYN today — -# it is a status report, not a green-only gate. Failing designs keep a -# stub rules-syn.json (fails honestly at the synth stage); passing -# designs get real rules via bazelisk run :_syn_update. +# it is a status report, not a green-only gate. A design can fail by not +# synthesizing at all, or by missing the rules-base.json gates that its +# regular flow meets (e.g. aes-block's SYN area blows past the yosys +# reference). # Design directory -> DESIGN_NAME (bazel target prefix), ordered # fastest-first so --keep_going runs surface quick failures early. @@ -59,6 +61,41 @@ SYN_SLOW_DESIGNS = { "swerv_wrapper": "swerv_wrapper", } +# Designs whose OpenROAD-SYN synthesis fails today. They stay in +# syn_test (failing honestly) and in the QoR graph (best-effort FAIL +# columns), but the clock-period plot depends on each design's generated +# synthesis rules snapshot, which these cannot produce. +# - mock-alu: SDC references yosys-style register names (*io_out_REG*) +# absent from the SYN netlist. +# - riscv32i: slang rejects procedural assignment to nets (dmem.v). +# - mock-cpu: slang rejects endianness-mismatched part-select +# (wptr_full.v). +SYN_FAILING_DESIGNS = [ + "mock-alu", + "mock-cpu", + "riscv32i", +] + +# Generated synthesis QoR snapshots (rules.json from the syn variant's +# update_rules stage) for designs whose OpenROAD-SYN synthesis passes. +# These are bazel outputs, not checked-in files: the syn variant's QoR +# gate checks the synthesis subset of rules-base.json instead, so no +# rules-syn.json files live in git. +[ + filegroup( + name = "{pkg}_syn_rules".format(pkg = pkg), + srcs = [ + "//flow/designs/asap7/{pkg}:{name}_syn_update_rules".format( + name = name, + pkg = pkg, + ), + ], + output_group = "rules.json", + ) + for pkg, name in SYN_TEST_DESIGNS.items() + if pkg not in SYN_FAILING_DESIGNS +] + # Explicitly listed manual tests DO run through a test_suite (the manual # tag only exempts them from wildcard expansion); the suite itself is # manual so `bazelisk test //flow/...` does not pull them in either. @@ -84,30 +121,32 @@ test_suite( # cp -f bazel-bin/flow/designs/asap7/openroad-syn-{qor,runtime}.png \ # flow/docs/images/ # Effective clock period (target - gated worst slack) across stages, -# one series per design, OpenROAD-SYN synthesis point overlaid. Consumes -# only the checked-in rules-*.json files — no flow runs. Same refresh -# pattern as syn_qor_png, into flow/docs/images/openroad-syn-clock-period.png. +# one series per design, OpenROAD-SYN synthesis point overlaid. The base +# series comes from the checked-in rules-base.json; the SYN point comes +# from the generated synthesis rules snapshot (the syn variant's +# update_rules output), so building this runs synthesis for the passing +# designs. Same refresh pattern as syn_qor_png, into +# flow/docs/images/openroad-syn-clock-period.png. genrule( name = "clock_period_png", srcs = [ - "//flow/designs/asap7/{pkg}:rules-{kind}.json".format( - kind = kind, - pkg = pkg, - ) + "//flow/designs/asap7/{pkg}:rules-base.json".format(pkg = pkg) for pkg in SYN_TEST_DESIGNS - for kind in [ - "base", - "syn", - ] + if pkg not in SYN_FAILING_DESIGNS + ] + [ + ":{pkg}_syn_rules".format(pkg = pkg) + for pkg in SYN_TEST_DESIGNS + if pkg not in SYN_FAILING_DESIGNS ], outs = ["openroad-syn-clock-period.png"], cmd = "$(location //flow/util:plotClockPeriod) --output $@ " + " ".join([ ("--design {pkg} " + "--rules-base $(location //flow/designs/asap7/{pkg}:rules-base.json) " + - "--rules-syn $(location //flow/designs/asap7/{pkg}:rules-syn.json)").format( + "--rules-syn $(location :{pkg}_syn_rules)").format( pkg = pkg, ) for pkg in SYN_TEST_DESIGNS + if pkg not in SYN_FAILING_DESIGNS ]), tags = ["manual"], tools = ["//flow/util:plotClockPeriod"], diff --git a/flow/designs/asap7/aes-block/rules-syn.json b/flow/designs/asap7/aes-block/rules-syn.json deleted file mode 100644 index 6677f6b0e4..0000000000 --- a/flow/designs/asap7/aes-block/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 1620.0, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 12862, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -22.5, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -90.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 450.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/aes-mbff/rules-syn.json b/flow/designs/asap7/aes-mbff/rules-syn.json deleted file mode 100644 index ed8b02ad48..0000000000 --- a/flow/designs/asap7/aes-mbff/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 1620.0, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 12862, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -82.6, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -3530.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 2, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 380.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/aes/rules-syn.json b/flow/designs/asap7/aes/rules-syn.json deleted file mode 100644 index ed8b02ad48..0000000000 --- a/flow/designs/asap7/aes/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 1620.0, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 12862, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -82.6, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -3530.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 2, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 380.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/aes_lvt/rules-syn.json b/flow/designs/asap7/aes_lvt/rules-syn.json deleted file mode 100644 index f738b07c14..0000000000 --- a/flow/designs/asap7/aes_lvt/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 1620.0, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 12844, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -21.0, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -75.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 360.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/cva6/rules-syn.json b/flow/designs/asap7/cva6/rules-syn.json deleted file mode 100644 index 693b236889..0000000000 --- a/flow/designs/asap7/cva6/rules-syn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "synth__design__instance__count__stdcell": { - "value": 0, - "compare": ">" - } -} diff --git a/flow/designs/asap7/ethmac/rules-syn.json b/flow/designs/asap7/ethmac/rules-syn.json deleted file mode 100644 index a70b9019a1..0000000000 --- a/flow/designs/asap7/ethmac/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 8650.0, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 60231, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -157.0, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -7180.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 6, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 300.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/ethmac_lvt/rules-syn.json b/flow/designs/asap7/ethmac_lvt/rules-syn.json deleted file mode 100644 index 9cf9c612c9..0000000000 --- a/flow/designs/asap7/ethmac_lvt/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 8700.0, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 57000, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -87.4, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -2630.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 6, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 300.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/gcd-ccs/rules-syn.json b/flow/designs/asap7/gcd-ccs/rules-syn.json deleted file mode 100644 index 4a69b2efa4..0000000000 --- a/flow/designs/asap7/gcd-ccs/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 46.7, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 352, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -81.0, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -559.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 2, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 310.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/gcd/rules-syn.json b/flow/designs/asap7/gcd/rules-syn.json deleted file mode 100644 index 4a69b2efa4..0000000000 --- a/flow/designs/asap7/gcd/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 46.7, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 352, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -81.0, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -559.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 2, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 310.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/ibex/rules-syn.json b/flow/designs/asap7/ibex/rules-syn.json deleted file mode 100644 index 693b236889..0000000000 --- a/flow/designs/asap7/ibex/rules-syn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "synth__design__instance__count__stdcell": { - "value": 0, - "compare": ">" - } -} diff --git a/flow/designs/asap7/jpeg/rules-syn.json b/flow/designs/asap7/jpeg/rules-syn.json deleted file mode 100644 index 4c74fd9c20..0000000000 --- a/flow/designs/asap7/jpeg/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 7710.0, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 59325, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -34.0, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -136.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 680.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/jpeg_lvt/rules-syn.json b/flow/designs/asap7/jpeg_lvt/rules-syn.json deleted file mode 100644 index c8bf799e45..0000000000 --- a/flow/designs/asap7/jpeg_lvt/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 7580.0, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 56743, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -30.0, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -120.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 600.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/asap7/mock-alu/rules-syn.json b/flow/designs/asap7/mock-alu/rules-syn.json deleted file mode 100644 index 693b236889..0000000000 --- a/flow/designs/asap7/mock-alu/rules-syn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "synth__design__instance__count__stdcell": { - "value": 0, - "compare": ">" - } -} diff --git a/flow/designs/asap7/mock-cpu/rules-syn.json b/flow/designs/asap7/mock-cpu/rules-syn.json deleted file mode 100644 index 693b236889..0000000000 --- a/flow/designs/asap7/mock-cpu/rules-syn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "synth__design__instance__count__stdcell": { - "value": 0, - "compare": ">" - } -} diff --git a/flow/designs/asap7/riscv32i-mock-sram/rules-syn.json b/flow/designs/asap7/riscv32i-mock-sram/rules-syn.json deleted file mode 100644 index 693b236889..0000000000 --- a/flow/designs/asap7/riscv32i-mock-sram/rules-syn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "synth__design__instance__count__stdcell": { - "value": 0, - "compare": ">" - } -} diff --git a/flow/designs/asap7/riscv32i/rules-syn.json b/flow/designs/asap7/riscv32i/rules-syn.json deleted file mode 100644 index 693b236889..0000000000 --- a/flow/designs/asap7/riscv32i/rules-syn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "synth__design__instance__count__stdcell": { - "value": 0, - "compare": ">" - } -} diff --git a/flow/designs/asap7/swerv_wrapper/rules-syn.json b/flow/designs/asap7/swerv_wrapper/rules-syn.json deleted file mode 100644 index 693b236889..0000000000 --- a/flow/designs/asap7/swerv_wrapper/rules-syn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "synth__design__instance__count__stdcell": { - "value": 0, - "compare": ">" - } -} diff --git a/flow/designs/asap7/uart/rules-syn.json b/flow/designs/asap7/uart/rules-syn.json deleted file mode 100644 index e91a42bc91..0000000000 --- a/flow/designs/asap7/uart/rules-syn.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "synth__canonical_netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__netlist__hash": { - "value": "N/A", - "compare": "==", - "level": "warning" - }, - "synth__design__instance__area__stdcell": { - "value": 90.3, - "compare": "<=" - }, - "synth__design__instance__count__stdcell": { - "value": 667, - "compare": "<=" - }, - "synth__timing__setup__ws": { - "value": -376.0, - "compare": ">=" - }, - "synth__timing__setup__tns": { - "value": -25000.0, - "compare": ">=" - }, - "constraints__clocks__count": { - "value": 2, - "compare": "==" - }, - "constraints__clocks__period": { - "value": 270.0, - "compare": "==" - } -} \ No newline at end of file diff --git a/flow/designs/design.bzl b/flow/designs/design.bzl index ca5fbb2c54..9879461b7e 100644 --- a/flow/designs/design.bzl +++ b/flow/designs/design.bzl @@ -73,22 +73,24 @@ def _syn_status_targets( - a synthesis-only variant "syn" flow with SYNTH_USE_SYN=1 forced, regardless of the config.mk default: _syn_synth plus — when - the package has a rules-syn.json — the _syn_test QoR gate - and _syn_update rules regenerator. + the design has a rules-base.json — the _syn_test QoR gate + (checking the synthesis-stage subset of rules-base.json, so no + per-variant rules file is committed) and _syn_update_rules, + whose generated rules.json is the synthesis QoR snapshot that + aggregating plots consume. - a best-effort _syn_qor / _yosys_qor pair whose qor.json outputs feed the syn-vs-yosys QoR comparison graph. """ qor_sources = {k: v for k, v in sources.items() if k != "RULES_JSON"} - syn_sources = dict(qor_sources) - if native.glob(["rules-syn.json"], allow_empty = True): - syn_sources["RULES_JSON"] = [":rules-syn.json"] orfs_flow( name = name, verilog_files = verilog_files, pdk = "//flow:" + platform, arguments = arguments | {"SYNTH_USE_SYN": "1"}, user_arguments = user_arguments, - sources = syn_sources, + # sources carries the auto-detected rules-base.json as RULES_JSON; + # the syn variant's test checks its synthesis-stage subset. + sources = sources, user_sources = user_sources, macros = macros, stage_data = stage_data, @@ -96,6 +98,9 @@ def _syn_status_targets( last_stage = "synth", tags = ["manual"], test_kwargs = {"tags": ["manual"]}, + # The platform-level aggregation package consumes the + # update_rules stage's generated rules.json. + visibility = ["//visibility:public"], ) for qor_variant, qor_use_syn in [("syn_qor", True), ("yosys_qor", False)]: orfs_qor( diff --git a/flow/docs/images/openroad-syn-clock-period.png b/flow/docs/images/openroad-syn-clock-period.png index f2161757b9db8bc4e468f5b56008520e5ccba9ea..44b71c09a044fb2e231b92f63f1812bef4da9ff1 100755 GIT binary patch literal 76320 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

^785Y1mEKAv6Y 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 UpQLh~{>6JzV)CLz!UpgE8~Qjqi2wiq diff --git a/flow/util/checkMetadata.py b/flow/util/checkMetadata.py index 1a525d88a8..71c25425df 100755 --- a/flow/util/checkMetadata.py +++ b/flow/util/checkMetadata.py @@ -33,6 +33,14 @@ ) parser.add_argument("--metadata", "-m", required=True, help="The metadata file") parser.add_argument("--rules", "-r", required=True, nargs="+", help="The rules file") +parser.add_argument( + "--only-prefix", + nargs="+", + default=None, + help="Check only rules whose field starts with one of these prefixes. " + "Lets a partial run (e.g. synthesis-only) be gated by a full-flow " + "rules file without tripping the missing-field error.", +) args = parser.parse_args() with open(args.metadata) as metadataFile: @@ -46,6 +54,13 @@ else: print(f"[WARN] File {filePath} not found") +if args.only_prefix: + rules = { + field: rule + for field, rule in rules.items() + if any(field.startswith(prefix) for prefix in args.only_prefix) + } + if len(rules) == 0: print("No rules") sys.exit(1) diff --git a/flow/util/utils.mk b/flow/util/utils.mk index 5994c071b8..b1d723f8fb 100644 --- a/flow/util/utils.mk +++ b/flow/util/utils.mk @@ -4,10 +4,12 @@ metadata: finish metadata-generate metadata-check # Synthesis-only metadata: generate and check QoR after just the synth -# stage, without running the full flow. Used with FLOW_VARIANT=syn to -# gate OpenROAD-SYN synthesis results against rules-syn.json. +# stage, without running the full flow. The synthesis-stage subset of +# the design's regular rules file gates the run, so no per-variant +# rules file needs to be committed. .PHONY: metadata-synth -metadata-synth: synth metadata-generate metadata-check +metadata-synth: export RULES_JSON = $(DESIGN_DIR)/rules-base.json +metadata-synth: synth metadata-generate metadata-check-synth .PHONY: metadata-generate metadata-generate: @@ -31,6 +33,16 @@ metadata-check: -r $(RULES_JSON) 2>&1 \ | tee $(abspath $(REPORTS_DIR)/metadata-check.log) +# Check only the synthesis-stage subset of RULES_JSON, so a +# synthesis-only run can be gated by the design's full-flow rules file. +.PHONY: metadata-check-synth +metadata-check-synth: + $(PYTHON_EXE) $(UTILS_DIR)/checkMetadata.py \ + -m $(REPORTS_DIR)/metadata.json \ + -r $(RULES_JSON) \ + --only-prefix synth__ constraints__ 2>&1 \ + | tee $(abspath $(REPORTS_DIR)/metadata-check.log) + .PHONY: clean_metadata clean_metadata: rm -f $(REPORTS_DIR)/design-dir.txt diff --git a/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch b/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch index 32e6271bb6..2de7f72cfd 100644 --- a/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch +++ b/patches/bazel-orfs/0001-synth-support-OpenROAD-SYN-engine-SYNTH_USE_SYN-1-an.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 16:14:51 +0200 -Subject: [PATCH 1/4] synth: support OpenROAD-SYN engine (SYNTH_USE_SYN=1) and +Subject: [PATCH 1/5] synth: support OpenROAD-SYN engine (SYNTH_USE_SYN=1) and declare 1_synth.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 diff --git a/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch b/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch index 056733a32a..3200ce00b8 100644 --- a/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch +++ b/patches/bazel-orfs/0002-flow-emit-metadata-test-update-chain-for-synthesis-o.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 16:16:38 +0200 -Subject: [PATCH 2/4] flow: emit metadata/test/update chain for synthesis-only +Subject: [PATCH 2/5] flow: emit metadata/test/update chain for synthesis-only flows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 diff --git a/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch b/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch index 982007c716..03516d06a0 100644 --- a/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch +++ b/patches/bazel-orfs/0003-update-copy-only-rules.json-in-the-orfs_update-scrip.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 16:35:57 +0200 -Subject: [PATCH 3/4] update: copy only rules.json in the orfs_update script +Subject: [PATCH 3/5] update: copy only rules.json in the orfs_update script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit diff --git a/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch b/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch index e3c5bba40e..65e1cc4950 100644 --- a/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch +++ b/patches/bazel-orfs/0004-design-caller-extension-hook-for-per-design-status-t.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Thu, 16 Jul 2026 16:23:49 +0200 -Subject: [PATCH 4/4] design: caller extension hook for per-design status +Subject: [PATCH 4/5] design: caller extension hook for per-design status targets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 diff --git a/patches/bazel-orfs/0005-flow-synthesis-only-QoR-checks-the-synth-subset-of-t.patch b/patches/bazel-orfs/0005-flow-synthesis-only-QoR-checks-the-synth-subset-of-t.patch new file mode 100644 index 0000000000..97650273d7 --- /dev/null +++ b/patches/bazel-orfs/0005-flow-synthesis-only-QoR-checks-the-synth-subset-of-t.patch @@ -0,0 +1,77 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=98yvind=20Harboe?= +Date: Thu, 16 Jul 2026 19:38:13 +0200 +Subject: [PATCH 5/5] flow: synthesis-only QoR checks the synth subset of the + full-flow rules +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The synthesis-only chain's test now runs make metadata-check-synth so a +design's regular rules file (e.g. rules-base.json) can gate the synth +variant directly — only the synthesis-stage subset of the rules is +checked, and no per-variant rules file needs to be committed. The +_update target is no longer emitted for synthesis-only flows: it +would overwrite the design's full-flow rules with synthesis-only rules. +The update_rules stage target remains as the generated synthesis QoR +snapshot for aggregating consumers. + +Co-Authored-By: Claude Fable 5 +Signed-off-by: Øyvind Harboe +--- + private/flow.bzl | 32 ++++++++++++++++---------------- + 1 file changed, 16 insertions(+), 16 deletions(-) + +diff --git a/private/flow.bzl b/private/flow.bzl +index c071af8..41cc7ed 100644 +--- a/private/flow.bzl ++++ b/private/flow.bzl +@@ -837,12 +837,20 @@ def _orfs_pass( + **_strip_tool_kwargs(**update_kwargs) + ) + elif steps[-1].stage == "synth" and start_stage <= 1 and not mock_area: +- # Synthesis-only flow (last_stage = "synth"): emit the same +- # metadata → test → update_rules → update chain as the full flow, +- # fed straight from the synth stage. genMetrics.py tolerates a +- # synthesis-only tree (no 2_floorplan.sdc, no stage 2..6 logs). +- # Gated on RULES_JSON like the full-flow test: without rules +- # there is nothing for metadata-check to check. ++ # Synthesis-only flow (last_stage = "synth"): emit a metadata → ++ # test → update_rules chain fed straight from the synth stage. ++ # genMetrics.py tolerates a synthesis-only tree (no ++ # 2_floorplan.sdc, no stage 2..6 logs). Gated on RULES_JSON like ++ # the full-flow test; the RULES_JSON is typically the design's ++ # full-flow rules file, so the test runs make metadata-check-synth, ++ # which checks only the synthesis-stage subset of the rules. ++ # ++ # Unlike the full flow there is deliberately no _update ++ # target: it would overwrite the design's full-flow rules file ++ # with synthesis-only rules. The update_rules stage target still ++ # exists — its generated rules.json is the synthesis QoR snapshot ++ # consumers can aggregate (e.g. plots) without checking rules ++ # files into git. + test_args = get_stage_args( + TEST_STAGE_IMPL.stage, + stage_arguments, +@@ -865,19 +873,11 @@ def _orfs_pass( + TEST_STAGE_IMPL, + GENERATE_METADATA_STAGE_IMPL, + kwargs = kwargs | {"tags": []} | test_kwargs, ++ more_kwargs = {"cmd": "metadata-check-synth"}, + ) +- rules_name = do_step( ++ do_step( + UPDATE_RULES_IMPL, + GENERATE_METADATA_STAGE_IMPL, + kwargs = kwargs, + more_kwargs = kwargs, + ) +- update_kwargs = dict(kwargs) +- update_kwargs.pop("substeps", None) +- update_kwargs.pop("lint", None) +- orfs_update( +- name = _step_name(name, variant, "update"), +- rules_json = sources["RULES_JSON"][0], +- logs = [rules_name], +- **_strip_tool_kwargs(**update_kwargs) +- )