diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P56_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P56_-40C.ccs.v
new file mode 100644
index 0000000..62d0e12
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P56_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P56_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 17:03:28 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P76_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P76_-40C.ccs.v
new file mode 100644
index 0000000..ce71c60
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P76_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P76_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 17:40:54 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_-40C.ccs.v
new file mode 100644
index 0000000..34fa0c8
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P95_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 18:20:06 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_100C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_100C.ccs.v
new file mode 100644
index 0000000..f920793
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_100C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P95_100C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 18:59:28 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_150C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_150C.ccs.v
new file mode 100644
index 0000000..4f85fbd
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_150C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P95_150C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 19:36:37 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P28_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P28_-40C.ccs.v
new file mode 100644
index 0000000..c468de8
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P28_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P28_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 20:15:17 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P44_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P44_-40C.ccs.v
new file mode 100644
index 0000000..1af51f4
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P44_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P44_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 20:53:58 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_-40C.ccs.v
new file mode 100644
index 0000000..4929c30
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P60_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 21:31:49 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_100C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_100C.ccs.v
new file mode 100644
index 0000000..7878b9f
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_100C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P60_100C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 22:09:48 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_150C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_150C.ccs.v
new file mode 100644
index 0000000..1bcc954
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_150C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P60_150C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 22:48:24 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P20_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P20_25C.ccs.v
new file mode 100644
index 0000000..4ed2bca
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P20_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P20_25C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 23:27:22 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P35_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P35_25C.ccs.v
new file mode 100644
index 0000000..019154a
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P35_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P35_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 00:06:57 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P44_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P44_25C.ccs.v
new file mode 100644
index 0000000..77c4d40
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P44_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P44_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 00:46:41 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P50_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P50_25C.ccs.v
new file mode 100644
index 0000000..5777503
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P50_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P50_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 01:23:54 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P62_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P62_25C.ccs.v
new file mode 100644
index 0000000..48d2e64
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P62_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P62_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 02:02:50 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P68_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P68_25C.ccs.v
new file mode 100644
index 0000000..f3d08a6
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P68_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P68_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 02:42:40 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_100C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_100C.ccs.v
new file mode 100644
index 0000000..58bdf9e
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_100C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P80_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 03:21:05 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_150C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_150C.ccs.v
new file mode 100644
index 0000000..2b5d2fe
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_150C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P80_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 04:00:58 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_25C.ccs.v
new file mode 100644
index 0000000..d4a8feb
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P80_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 04:41:56 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P89_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P89_25C.ccs.v
new file mode 100644
index 0000000..644cf98
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P89_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P89_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 05:19:57 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_2P10_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_2P10_25C.ccs.v
new file mode 100644
index 0000000..dd6be06
--- /dev/null
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_2P10_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_2P10_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 05:59:16 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P56_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P56_-40C.ccs.v
new file mode 100644
index 0000000..143dd67
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P56_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P56_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 19:56:46 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P76_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P76_-40C.ccs.v
new file mode 100644
index 0000000..132fb38
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P76_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P76_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 20:34:19 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_-40C.ccs.v
new file mode 100644
index 0000000..8491004
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P95_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 21:11:17 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_100C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_100C.ccs.v
new file mode 100644
index 0000000..a0fa2b0
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_100C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P95_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 21:49:21 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_150C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_150C.ccs.v
new file mode 100644
index 0000000..73f1658
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_150C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P95_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 22:26:51 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P28_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P28_-40C.ccs.v
new file mode 100644
index 0000000..217f9b9
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P28_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P28_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 23:04:36 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P44_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P44_-40C.ccs.v
new file mode 100644
index 0000000..8760c4e
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P44_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P44_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 23:42:14 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_-40C.ccs.v
new file mode 100644
index 0000000..634ffdc
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P60_-40C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 00:18:12 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_100C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_100C.ccs.v
new file mode 100644
index 0000000..ccda147
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_100C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P60_100C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 00:55:31 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_150C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_150C.ccs.v
new file mode 100644
index 0000000..71c4321
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_150C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P60_150C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 01:32:56 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P20_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P20_25C.ccs.v
new file mode 100644
index 0000000..dc36024
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P20_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P20_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 02:08:21 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P35_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P35_25C.ccs.v
new file mode 100644
index 0000000..f7f3116
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P35_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P35_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 02:45:12 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P44_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P44_25C.ccs.v
new file mode 100644
index 0000000..a9c532d
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P44_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P44_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 03:21:05 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P50_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P50_25C.ccs.v
new file mode 100644
index 0000000..a599fa6
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P50_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P50_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 03:58:01 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P62_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P62_25C.ccs.v
new file mode 100644
index 0000000..ea9542d
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P62_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P62_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 04:34:40 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P68_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P68_25C.ccs.v
new file mode 100644
index 0000000..d0d8623
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P68_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P68_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 05:10:02 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_100C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_100C.ccs.v
new file mode 100644
index 0000000..dc769bb
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_100C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P80_100C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 05:47:09 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_150C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_150C.ccs.v
new file mode 100644
index 0000000..037e847
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_150C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P80_150C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 06:24:40 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_25C.ccs.v
new file mode 100644
index 0000000..7042078
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P80_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 07:01:49 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P89_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P89_25C.ccs.v
new file mode 100644
index 0000000..33f0529
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P89_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P89_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 07:39:44 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_2P10_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_2P10_25C.ccs.v
new file mode 100644
index 0000000..f8a36be
--- /dev/null
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_2P10_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_2P10_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 08:17:42 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P56_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P56_-40C.ccs.v
new file mode 100644
index 0000000..ad7e00f
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P56_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P56_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 06:37:47 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P76_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P76_-40C.ccs.v
new file mode 100644
index 0000000..d5b39fa
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P76_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P76_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 07:15:10 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_-40C.ccs.v
new file mode 100644
index 0000000..ef75f6f
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P95_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 07:52:10 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_100C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_100C.ccs.v
new file mode 100644
index 0000000..0d4f1fa
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_100C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P95_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 08:30:56 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_150C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_150C.ccs.v
new file mode 100644
index 0000000..419f1c4
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_150C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P95_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 09:07:46 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P28_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P28_-40C.ccs.v
new file mode 100644
index 0000000..d5d743b
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P28_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P28_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 09:46:10 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P44_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P44_-40C.ccs.v
new file mode 100644
index 0000000..178234e
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P44_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P44_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 10:26:30 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_-40C.ccs.v
new file mode 100644
index 0000000..3e19e9b
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_-40C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P60_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 11:05:17 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_100C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_100C.ccs.v
new file mode 100644
index 0000000..194a160
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_100C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P60_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 11:43:53 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_150C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_150C.ccs.v
new file mode 100644
index 0000000..a1f4eb6
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_150C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P60_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 12:22:44 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P20_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P20_25C.ccs.v
new file mode 100644
index 0000000..26e2882
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P20_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P20_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 13:00:39 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P35_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P35_25C.ccs.v
new file mode 100644
index 0000000..ddeae80
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P35_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P35_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 13:38:03 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P44_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P44_25C.ccs.v
new file mode 100644
index 0000000..c177eae
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P44_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P44_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 14:15:32 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P50_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P50_25C.ccs.v
new file mode 100644
index 0000000..703ae69
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P50_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P50_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 14:53:03 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P62_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P62_25C.ccs.v
new file mode 100644
index 0000000..9d2d8d4
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P62_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P62_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 15:31:14 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P68_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P68_25C.ccs.v
new file mode 100644
index 0000000..c81a5ad
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P68_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P68_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 16:09:11 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_100C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_100C.ccs.v
new file mode 100644
index 0000000..eee3fbc
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_100C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P80_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 16:47:03 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_150C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_150C.ccs.v
new file mode 100644
index 0000000..c1b15f4
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_150C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P80_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 17:26:19 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_25C.ccs.v
new file mode 100644
index 0000000..efe9c71
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P80_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 18:04:16 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P89_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P89_25C.ccs.v
new file mode 100644
index 0000000..8525d41
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P89_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P89_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 18:42:12 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_2P10_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_2P10_25C.ccs.v
new file mode 100644
index 0000000..6f5cd78
--- /dev/null
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_2P10_25C.ccs.v
@@ -0,0 +1,2143 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_2P10_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 19:20:10 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1, int_fwire_2;
+
+	and (CO, A, B);
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	or (CON, CO, int_fwire_0);
+	and (int_fwire_1, A__bar, B);
+	and (int_fwire_2, A, B__bar);
+	or (S, int_fwire_2, int_fwire_1);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		if (B)
+			(A => CON) = 0;
+		if (~B)
+			(A => CON) = 0;
+		if (A)
+			(B => CON) = 0;
+		if (~A)
+			(B => CON) = 0;
+		if (~B)
+			(A => S) = 0;
+		if (B)
+			(A => S) = 0;
+		if (~A)
+			(B => S) = 0;
+		if (A)
+			(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
+	output Q, QN;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
