Adding codegen tools

This commit is contained in:
2023-11-23 23:16:51 +01:00
parent 0f30f0206f
commit 0a93657548
9 changed files with 681 additions and 0 deletions

43
codegen/awd-indicator.py Normal file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/python3
import font
from matrix import Vector, Matrix, pi
try:
import svgwrite
has_svgwrite = True
except ImportError:
has_svgwrite = False
gmap = font.glyph_map("rowmans.jhf")
lines = [[Vector(0.0, 0.5), Vector(0.0, 0.4)]]
vglyph, width = font.typeset(gmap, ["capa", "capw", "capd"])
xform = Matrix.rotation(pi/2).multiply(Matrix.scale(0.1/width))
move = Vector(-width/2, 0)
vglyph = move.translate(vglyph)
vglyph = xform.multiply(vglyph)
vglyph = Vector(0.001, 0.35).translate(vglyph)
lines.extend(vglyph)
def accumulative_range(vv):
offset = 0
for v in vv:
yield range(offset, offset+len(v))
offset = offset + len(v)
print("val awd_ident_color = Color (0xFF, 0xF7, 0x00)")
print("val awd_ident =")
print(" Design(listOf({}),\n listOf({}))".format(
",\n ".join(map(lambda l: ", ".join(map(lambda v: "Vector({}F, {}F)".format(v.x, v.y), l)), lines)),
",\n ".join(map(lambda t: "Design.Trace(listOf({}), 1.0F, awd_ident_color)".format(", ".join(map(str, t))), accumulative_range(lines)))))
if has_svgwrite:
dwg = svgwrite.Drawing('awd-indicator.svg', size=('1000', '1000'))
for pl in lines:
points = list(map(lambda v: ((v.x + 0.5) * 1000 , (v.y + 0.5) * 1000 ), pl))
dwg.add(dwg.polyline(points, fill='none', stroke='black'))
dwg.save()

43
codegen/cog-indicator.py Normal file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/python3
import font
from matrix import Vector, Matrix, pi
try:
import svgwrite
has_svgwrite = True
except ImportError:
has_svgwrite = False
gmap = font.glyph_map("rowmans.jhf")
lines = [[Vector(0.0, 0.5), Vector(0.0, 0.4)]]
vglyph, width = font.typeset(gmap, ["capc", "capo", "capg"])
xform = Matrix.rotation(pi/2).multiply(Matrix.scale(0.1/width))
move = Vector(-width/2, 0)
vglyph = move.translate(vglyph)
vglyph = xform.multiply(vglyph)
vglyph = Vector(0.001, 0.35).translate(vglyph)
lines.extend(vglyph)
def accumulative_range(vv):
offset = 0
for v in vv:
yield range(offset, offset+len(v))
offset = offset + len(v)
print("val cog_ident_color = Color(0x00, 0x00, 0xFF)")
print("val cog_ident =")
print(" Design(listOf({}),\n listOf({}))".format(
",\n ".join(map(lambda l: ", ".join(map(lambda v: "Vector({}F, {}F)".format(v.x, v.y), l)), lines)),
",\n ".join(map(lambda t: "Design.Trace(listOf({}), 1.0F, cog_ident_color)".format(", ".join(map(str, t))), accumulative_range(lines)))))
if has_svgwrite:
dwg = svgwrite.Drawing('cog-indicator.svg', size=('1000', '1000'))
for pl in lines:
points = list(map(lambda v: ((v.x + 0.5) * 1000 , (v.y + 0.5) * 1000 ), pl))
dwg.add(dwg.polyline(points, fill='none', stroke='black'))
dwg.save()

61
codegen/compass-rose.py Executable file
View File

@@ -0,0 +1,61 @@
#!/usr/bin/python3
# application to print out the required code to draw a compass rose
# of size 1 by 1 in quadrant 1
import font
from matrix import Vector, Matrix, pi
from math import cos, sin, pi
major_len=0.3
middle_len=0.15
minor_len=0.1
print("val compass_rose = ")
# North
print(" Design(listOf(Vector(0.0F, 0.5F), Vector(0.0F, {}F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Red))) +".format(0.5-(major_len/2)))
# N
gmap = font.glyph_map("timesr.jhf")
vglyph, width = font.typeset(gmap, ["capn"])
xform = Matrix.rotation(pi).multiply(Matrix.scale(0.08/width))
vglyph = Vector(0.0, 0.3).translate(xform.multiply(vglyph))
print(" {} +".format(font.toKotlin(vglyph, "1.5F", "Color.Red")))
# East
print(" Design(listOf(Vector(0.5F, 0.0F), Vector({}F, 0.0F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Gray))) +".format(0.5-(major_len/2)))
# South
print(" Design(listOf(Vector(0.0F, -0.5F), Vector(0.0F, {}F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Gray))) +".format(-0.5+major_len/2))
# West
print(" Design(listOf(Vector(-0.5F, 0.0F), Vector({}F, 0.0F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Gray))) +".format(-0.5+major_len/2))
# NE
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +"
.format(cos(pi/4)/2, sin(pi/4)/2, cos(pi/4)*(1-middle_len)/2, sin(pi/4)*(1-middle_len)/2))
# NW
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +"
.format(cos(pi/4 + pi/2)/2, sin(pi/4 + pi/2)/2, cos(pi/4 + pi/2)*(1-middle_len)/2, sin(pi/4 + pi/2)*(1-middle_len)/2))
# SW
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +"
.format(cos(pi/4 + pi)/2, sin(pi/4 + pi)/2, cos(pi/4 + pi)*(1-middle_len)/2, sin(pi/4 + pi)*(1-middle_len)/2))
# SE
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +"
.format(cos(pi/4 + pi + pi/2)/2, sin(pi/4 + pi + pi/2)/2, cos(pi/4 + pi + pi/2)*(1-middle_len)/2, sin(pi/4 + pi + pi/2)*(1-middle_len)/2))
# minor markings are 3 markers within the other markers, 8 sections of 3 markers.
for i in range(0,8):
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 1.0F, Color.Gray))) +"
.format(cos( i*pi/4 + pi/16 )/2, sin( i*pi/4 + pi/16)/2, cos( i*pi/4 + pi/16 )*(1-minor_len)/2, sin( i*pi/4 + pi/16)*(1-minor_len)/2))
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 1.0F, Color.Gray))) +"
.format(cos( i*pi/4 + 2*pi/16 )/2, sin( i*pi/4 + 2*pi/16)/2, cos( i*pi/4 + 2*pi/16 )*(1-minor_len)/2, sin( i*pi/4 + 2*pi/16)*(1-minor_len)/2))
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 1.0F, Color.Gray))) +"
.format(cos( i*pi/4 + 3*pi/16 )/2, sin( i*pi/4 + 3*pi/16)/2, cos( i*pi/4 + 3*pi/16 )*(1-minor_len)/2, sin( i*pi/4 + 3*pi/16)*(1-minor_len)/2))
print(" Design(emptyList(), emptyList())")

92
codegen/font.py Executable file
View File

@@ -0,0 +1,92 @@
#!/usr/bin/python3
import sys
from matrix import Vector
glyphname = ["space", "exclamation", "hash", "dollar", "percent", "ampersand"
"quotestart", "leftparentes", "rigtparentes", "star", "plus", "comma",
"hyphen", "dot", "slash", "zero", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "colon", "semicolon", "lessthan",
"equals", "biggerthan", "questionmark", "at", "p2", "p3", "capa", "capb", "capc",
"capd", "cape", "capf", "capg", "caph", "capi", "capj", "capk", "capl",
"capm", "capn", "capo", "capp", "capq", "capr", "caps", "capt", "capu",
"capv", "capw", "capx", "capy", "capz", "bracketleft", "backslash",
"bracketright", "uparrow", "underscore", "quoteend", "a", "b", "c", "d",
"e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z", "curlystart", "verticalbar",
"curlyend", "tilde", "p1"]
def char2value (c):
return ord(c) - ord('R')
def read_hershey (l):
#
# Format is like this:
# ' 700 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF'
# ^ ^^ |---- coordinates ---------------|
# | |
# | |
# | Number of coordinates
# Character Identifier - not ASCII
points = list()
ident = int(l[0:5])
coords = int(l[5:8])
left = char2value(l[8])
right = char2value(l[9])
vdata = l[10:]
for t in vdata.split(" R"):
c = iter(t)
points.append(list())
for x in c:
y = next(c)
points[-1].append((char2value(x), -char2value(y)))
return (ident, left, right, points)
def glyph_map (file):
m = dict()
f = open(file, "r")
i = 0
for line in f:
(ident, left, right, coords) = read_hershey(line.rstrip("\n"))
m[glyphname[i]] = (left, right, coords)
i = i + 1
return m
def typeset(glyphmap, idents):
vectors = list()
offset = 0
for i in idents:
(left, right, coords) = glyphmap[i]
xlate = offset - left
for v in coords:
vectors.append(list(map(lambda c: Vector(c[0]+offset, c[1]), v)))
offset = offset + right - left
return vectors, offset
#
# lines: array of array of Vector
def toKotlin(lines, stroke, color):
def accumulative_range(vv):
offset = 0
for v in vv:
yield range(offset, offset+len(v))
offset = offset + len(v)
return " Design(listOf({}),\n listOf({}))".format(
",\n ".join(map(lambda l: ", ".join(map(lambda v: "Vector({}F, {}F)".format(v.x, v.y), l)), lines)),
",\n ".join(map(lambda t: "Design.Trace(listOf({}), {}, {})".format(", ".join(map(str, t)), stroke, color), accumulative_range(lines))))
def main():
f = open("rowmand.jhf", "r")
number = 0
for line in f:
(_, left, right, coords) = read_hershey(line.rstrip('\n'))
coords_text = "listOf(" + ", ".join(map(lambda cv : "listOf(" + ", ".join(map(lambda c : "Vector({}F, {}F)".format(c[0]/10, c[1]/10), cv)), coords)) + ")"
print("val glyph_{} = \n Glyph({}, {}, {})".format(glyphname[number], coords_text, left, right))
number = number + 1
if __name__ == "__main__":
main()

98
codegen/hallberg-rassy.py Normal file
View File

@@ -0,0 +1,98 @@
from matrix import Vector, Matrix, pi
hull_length = 559 - 18
y_xlate = -18 - (559-18)/2
hull_port_side = [
Vector(80, 18),
Vector(71, 21),
Vector(60, 27),
Vector(54, 34),
Vector(28, 120),
Vector(14, 180),
Vector(9, 218),
Vector(7, 261),
Vector(8, 288),
Vector(11, 328),
Vector(18, 367),
Vector(29, 414),
Vector(51, 479),
Vector(78, 542),
Vector(85, 559)
]
hull_port_side = Vector(-86, y_xlate).translate(hull_port_side)
hull_starboard_side = Matrix(-1, 0, 0, 1).multiply(hull_port_side)
hull_starboard_side.reverse()
hull = hull_port_side + hull_starboard_side
hull_detail_port_side = [
Vector(54, 34),
Vector(65, 32),
Vector(76, 30)
]
hull_detail_port_side = Vector(-86, y_xlate).translate(hull_detail_port_side)
hull_detail_starboard_side = Matrix(-1, 0, 0, 1).multiply(hull_detail_port_side)
hull_detail_starboard_side.reverse()
hull_detail = hull_detail_port_side + hull_detail_starboard_side
stick_port_side = [
Vector(86, 77),
Vector(84, 81),
Vector(85, 85),
Vector(86, 133)
]
stick_port_side = Vector(-86, y_xlate).translate(stick_port_side)
stick_starboard_side = Matrix(-1, 0, 0, 1).multiply(stick_port_side)
stick_starboard_side.reverse()
stick = stick_port_side + stick_starboard_side[1:-1]
cockpit_port_side = [
Vector(84, 90),
Vector(59, 89),
Vector(52, 92),
Vector(48, 99),
Vector(44, 113),
Vector(40, 139),
Vector(35, 203)
]
cockpit_port_side = Vector(-86, y_xlate).translate(cockpit_port_side)
cockpit_starboard_side = Matrix(-1, 0, 0, 1).multiply(cockpit_port_side)
cockpit_starboard_side.reverse()
cockpit = cockpit_port_side + cockpit_starboard_side
doghouse_port_side = [
Vector(37, 203),
Vector(37, 277),
Vector(40, 317),
Vector(46, 356),
Vector(55, 393),
Vector(66, 431),
Vector(68, 435),
Vector(73, 437),
Vector(80, 438)
]
doghouse_port_side = Vector(-86, y_xlate).translate(doghouse_port_side)
doghouse_starboard_side = Matrix(-1, 0, 0, 1).multiply(doghouse_port_side)
doghouse_starboard_side.reverse()
doghouse = doghouse_port_side + doghouse_starboard_side
scale = Matrix.scale(0.8/hull_length)
print("val ship_color=Color(0x80, 0x85, 0x88)")
ship = scale.multiply(hull + hull_detail + stick + cockpit + doghouse)
hull_trace = list(range(0, len(hull))) + [ 0 ]
hull_detail_trace = list(map(lambda x : x + len(hull), range(0, len(hull_detail))))
stick_trace = list(map(lambda x: x + len(hull) + len(hull_detail), list(range(0, len(stick))) + [0]))
cockpit_trace = list(map(lambda x: x + len(hull) + len(hull_detail) + len(stick),
list(range(0, len(cockpit))) + [ 0 ]))
doghouse_trace = list(map(lambda x: x + len(hull) + len(hull_detail) + len(stick) + len(cockpit),
list(range(0, len(doghouse)))))
traces = [hull_trace, hull_detail_trace, stick_trace, cockpit_trace, doghouse_trace]
print("val ship = Design(listOf({}), listOf({}))".format(
", ".join(map(lambda v: "Vector({}F, {}F)".format(v.x, v.y), ship)),
",\n ".join(map(lambda t: "Design.Trace(listOf({}), 2.0F, ship_color)".format(
", ".join(map(str, t))), traces))
))

56
codegen/matrix.py Normal file
View File

@@ -0,0 +1,56 @@
from math import cos, sin, pi
class Vector:
def __init__ (self, x, y):
self.x = x
self.y = y
def translate (self, other):
if isinstance (other, list):
return list(map(lambda v: self.translate(v), other))
if isinstance (other, Vector):
return Vector(self.x + other.x, self.y + other.y)
def __str__ (self):
return "[ {}; {} ]".format(self.x, self.y)
def __repr__ (self):
return self.__str__()
class Matrix:
@classmethod
def rotation (cls, theta):
return cls(cos(theta), -sin(theta), sin(theta), cos(theta))
@classmethod
def scale (cls, s):
return cls(s, 0, 0, s)
def __init__ (self, a, b, c, d):
self.a = a
self.b = b
self.c = c
self.d = d
def __str__ (self):
return "[ {} {}; {} {} ]".format(self.a, self.b, self.c, self.d)
def __repr__ (self):
return self.__str__()
def multiply (self, other):
if isinstance(other, Matrix):
return Matrix(self.a * other.a + self.b * other.c,
self.a * other.b + self.b * other.d,
self.c * other.a + self.d * other.c,
self.c * other.b + self.d * other.d)
if isinstance (other, float):
return Matrix(other * self.a, other * self.b, other * self.c, other * self.d)
if isinstance (other, Vector):
return Vector(self.a * other.x + self.b * other.y, self.c * other.x + self.d * other.y)
if isinstance (other, list):
return list(map(lambda v: self.multiply(v), other))

96
codegen/rowmand.jhf Normal file
View File

@@ -0,0 +1,96 @@
2699 1JZ
2714 24MXRFRTST RRFSFST RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY
2728 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM
2275 12H]SFLb RYFRb RLQZQ RKWYW
2719 51I\RBR_S_ RRBSBS_ RWIYIWGTFQFNGLILKMMNNVRWSXUXWWYTZQZOYNX RWIVHTGQGNHMIMKNMVQXSYUYWXYWZT[Q[NZLXNX RXXUZ
2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT
2718 71F_\MZMXNWPUVTXSYQZMZKYJWJUKSLRQOSMTKTISGQFPFNGMIMKNNPQUWXZZ[\[ R\M\NZNXO RYNXPVVUXSZQ[M[KZJYIWIUJSLQQNRMSKSIRG RSHQGPGNH ROGNINKONQQVWXYZZ\Z\[
2717 24MXTHSIRIQHQGRFSFTGTJSLQM RRGRHSHSGRG RSITJ RTHSL
2721 24KYUBSDQGOKNPNTOYQ]S`UbVb RUBVBTDRGPKOPOTPYR]T`Vb
2722 24KYNBPDRGTKUPUTTYR]P`NbOb RNBOBQDSGUKVPVTUYS]Q`Ob
2723 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO
2725 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R
2711 24MXTZS[R[QZQYRXSXTYT\S^Q_ RRYRZSZSYRY RS[T\ RTZS^
2724 8F_JQ[Q[R RJQJR[R
2710 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY
2720 8G^[BIbJb R[B\BJb
2700 42H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF ROGMJLOLRMWOZ RNYQZSZVY RUZWWXRXOWJUG RVHSGQGNH
2701 12H\NJPISFS[ RNJNKPJRHR[S[
2702 34H\LKLJMHNGPFTFVGWHXJXLWNUQL[ RLKMKMJNHPGTGVHWJWLVNTQK[ RLZYZY[ RK[Y[
2703 48H\MFXFQO RMFMGWG RWFPO RQNSNVOXQYTYUXXVZS[P[MZLYKWLW RPOSOVPXS RTOWQXTXUWXTZ RXVVYSZPZMYLW ROZLX
2704 18H\UIU[V[ RVFV[ RVFKVZV RUILV RLUZUZV
2705 53H\MFLO RNGMN RMFWFWG RNGWG RMNPMSMVNXPYSYUXXVZS[P[MZLYKWLW RLOMOONSNVOXR RTNWPXSXUWXTZ RXVVYSZPZMYLW ROZLX
2706 62H\VGWIXIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQ RWHTGRGOH RPGNJMOMTNXQZ RMVOYRZSZVYXV RTZWXXUXTWQTO RXSVPSOROOPMS RQONQMT
2707 12H\KFYFO[ RKFKGXG RXFN[O[
2708 68H\PFMGLILKMMNNPOTPVQWRXTXWWYTZPZMYLWLTMRNQPPTOVNWMXKXIWGTFPF RNGMIMKNMPNTOVPXRYTYWXYWZT[P[MZLYKWKTLRNPPOTNVMWKWIVG RWHTGPGMH RLXOZ RUZXX
2709 62H\WPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLXMXNZ RWMVPSR RWNUQRRQRNQLN RPRMPLMLLMIPG RLKNHQGRGUHWK RSGVIWMWRVWTZ RUYRZPZMY
2712 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY
2713 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\S^Q_ RRYRZSZSYRY RS[T\ RTZS^
2241 4F^ZIJRZ[
2726 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V
2242 4F^JIZRJ[
2715 58I\LKLJMHNGQFTFWGXHYJYLXNWOUPRQ RLKMKMJNHQGTGWHXJXLWNUORP RMIPG RUGXI RXMTP RRPRTSTSP RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY
2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV
2501 20H\RFJ[ RRIK[J[ RRIY[Z[ RRFZ[ RMUWU RLVXV
2502 44H\LFL[ RMGMZ RLFTFWGXHYJYMXOWPTQ RMGTGWHXJXMWOTP RMPTPWQXRYTYWXYWZT[L[ RMQTQWRXTXWWYTZMZ
2503 38H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV RZKYKXIWHUGQGOHMKLNLSMVOYQZUZWYXXYVZV
2504 32H]LFL[ RMGMZ RLFSFVGXIYKZNZSYVXXVZS[L[ RMGSGVHWIXKYNYSXVWXVYSZMZ
2505 27I\MFM[ RNGNZ RMFYF RNGYGYF RNPTPTQ RNQTQ RNZYZY[ RM[Y[
2506 21I[MFM[ RNGN[M[ RMFYF RNGYGYF RNPTPTQ RNQTQ
2507 44H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZRUR RZKYKXIWHUGQGOHNIMKLNLSMVNXOYQZUZWYXXYVYSUSUR
2508 22G]KFK[ RKFLFL[K[ RYFXFX[Y[ RYFY[ RLPXP RLQXQ
2509 8NWRFR[S[ RRFSFS[
2510 20J[VFVVUYSZQZOYNVMV RVFWFWVVYUZS[Q[OZNYMV
2511 22H]LFL[M[ RLFMFM[ RZFYFMR RZFMS RPOY[Z[ RQOZ[
2512 14IZMFM[ RMFNFNZ RNZYZY[ RM[Y[
2513 26F^JFJ[ RKKK[J[ RKKR[ RJFRX RZFRX RYKR[ RYKY[Z[ RZFZ[
2514 20G]KFK[ RLIL[K[ RLIY[ RKFXX RXFXX RXFYFY[
2515 40G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG
2516 27H\LFL[ RMGM[L[ RLFUFWGXHYJYMXOWPUQMQ RMGUGWHXJXMWOUPMP
2517 48G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG RSXX]Y] RSXTXY]
2518 34H\LFL[ RMGM[L[ RLFTFWGXHYJYMXOWPTQMQ RMGTGWHXJXMWOTPMP RRQX[Y[ RSQY[
2519 43H\YIWGTFPFMGKIKKLMMNOOTQVRWSXUXXWYTZPZNYMXKX RYIWIVHTGPGMHLILKMMONTPVQXSYUYXWZT[P[MZKX
2520 15J[RGR[ RSGS[R[ RLFYFYG RLFLGYG
2521 24G]KFKULXNZQ[S[VZXXYUYF RKFLFLUMXNYQZSZVYWXXUXFYF
2522 14H\JFR[ RJFKFRX RZFYFRX RZFR[
2523 26E_GFM[ RGFHFMX RRFMX RRIM[ RRIW[ RRFWX R]F\FWX R]FW[
2524 16H\KFX[Y[ RKFLFY[ RYFXFK[ RYFL[K[
2525 17I\KFRPR[S[ RKFLFSP RZFYFRP RZFSPS[
2526 20H\XFK[ RYFL[ RKFYF RKFKGXG RLZYZY[ RK[Y[
2223 12KYOBOb RPBPb ROBVB RObVb
804 3KYKFY^
2224 12KYTBTb RUBUb RNBUB RNbUb
2262 11JZPLRITL RMORJWO RRJR[
999 3JZJ]Z]
2716 24MXTFRGQIQLRMSMTLTKSJRJQK RRKRLSLSKRK RRGQK RQIRJ
2601 36H\WMW[X[ RWMXMX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX
2602 36H\LFL[M[ RLFMFM[ RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX
2603 32I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX RXPWQVOTNQNOONPMSMUNXOYQZTZVYWWXX
2604 36H\WFW[X[ RWFXFX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX
2605 36I[MTXTXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX RMSWSWQVOTNQNOONPMSMUNXOYQZTZVYWWXX
2606 24LZWFUFSGRJR[S[ RWFWGUGSH RTGSJS[ ROMVMVN ROMONVN
2607 48H\XMWMW\V_U`SaQaO`N_L_ RXMX\W_UaSbPbNaL_ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX
2608 25H\LFL[M[ RLFMFM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[
2609 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMR[S[ RRMSMS[
2610 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMRbSb RRMSMSb
2611 22H[LFL[M[ RLFMFM[ RXMWMMW RXMMX RPTV[X[ RQSX[
2612 8NWRFR[S[ RRFSFS[
2613 42CbGMG[H[ RGMHMH[ RHQKNMMPMRNSQS[ RHQKOMNONQORQR[S[ RSQVNXM[M]N^Q^[ RSQVOXNZN\O]Q][^[
2614 25H\LML[M[ RLMMMM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[
2615 36I\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM RQNOONPMSMUNXOYQZTZVYWXXUXSWPVOTNQN
2616 36H\LMLbMb RLMMMMb RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX
2617 36H\WMWbXb RWMXMXb RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX
2618 21KYOMO[P[ ROMPMP[ RPSQPSNUMXM RPSQQSOUNXNXM
2619 50J[XPWNTMQMNNMPNRPSUUWV RVUWWWXVZ RWYTZQZNY ROZNXMX RXPWPVN RWOTNQNNO RONNPOR RNQPRUTWUXWXXWZT[Q[NZMX
2620 16MXRFR[S[ RRFSFS[ ROMVMVN ROMONVN
2621 25H\LMLWMZO[R[TZWW RLMMMMWNYPZRZTYWW RWMW[X[ RWMXMX[
2622 14JZLMR[ RLMMMRY RXMWMRY RXMR[
2623 26F^IMN[ RIMJMNX RRMNX RRPN[ RRPV[ RRMVX R[MZMVX R[MV[
2624 16I[LMW[X[ RLMMMX[ RXMWML[ RXMM[L[
2625 17JZLMR[ RLMMMRY RXMWMRYNb RXMR[ObNb
2626 20I[VNL[ RXMNZ RLMXM RLMLNVN RNZXZX[ RL[X[
2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb
2229 3NVRBRb
2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb
2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O
2729 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF

96
codegen/rowmans.jhf Normal file
View File

@@ -0,0 +1,96 @@
699 1JZ
714 9MWRFRT RRYQZR[SZRY
717 6JZNFNM RVFVM
733 12H]SBLb RYBRb RLOZO RKUYU
719 27H\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX
2271 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT
734 35E_\O\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\Z\Y
731 8MWRHQGRFSGSIRKQL
721 11KYVBTDRGPKOPOTPYR]T`Vb
722 11KYNBPDRGTKUPUTTYR]P`Nb
2219 9JZRFRR RMIWO RWIMO
725 6E_RIR[ RIR[R
711 9MWSZR[QZRYSZS\R^Q_
724 3E_IR[R
710 6MWRYQZR[SZRY
720 3G][BIb
700 18H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF
701 5H\NJPISFS[
702 15H\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[
703 16H\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW
704 7H\UFKTZT RUFU[
705 18H\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW
706 24H\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT
707 6H\YFO[ RKFYF
708 30H\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF
709 24H\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX
712 12MWRMQNROSNRM RRYQZR[SZRY
713 15MWRMQNROSNRM RSZR[QZRYSZS\R^Q_
2241 4F^ZIJRZ[
726 6E_IO[O RIU[U
2242 4F^JIZRJ[
715 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY
2273 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV
501 9I[RFJ[ RRFZ[ RMTWT
502 24G\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[
503 19H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV
504 16G\KFK[ RKFRFUGWIXKYNYSXVWXUZR[K[
505 12H[LFL[ RLFYF RLPTP RL[Y[
506 9HZLFL[ RLFYF RLPTP
507 23H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZS RUSZS
508 9G]KFK[ RYFY[ RKPYP
509 3NVRFR[
510 11JZVFVVUYTZR[P[NZMYLVLT
511 9G\KFK[ RYFKT RPOY[
512 6HYLFL[ RL[X[
513 12F^JFJ[ RJFR[ RZFR[ RZFZ[
514 9G]KFK[ RKFY[ RYFY[
515 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF
516 14G\KFK[ RKFTFWGXHYJYMXOWPTQKQ
517 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RSWY]
518 17G\KFK[ RKFTFWGXHYJYLXNWOTPKP RRPY[
519 21H\YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX
520 6JZRFR[ RKFYF
521 11G]KFKULXNZQ[S[VZXXYUYF
522 6I[JFR[ RZFR[
523 12F^HFM[ RRFM[ RRFW[ R\FW[
524 6H\KFY[ RYFK[
525 7I[JFRPR[ RZFRP
526 9H\YFK[ RKFYF RK[Y[
2223 12KYOBOb RPBPb ROBVB RObVb
804 3KYKFY^
2224 12KYTBTb RUBUb RNBUB RNbUb
2262 11JZPLRITL RMORJWO RRJR[
999 3JZJ]Z]
730 8MWSFRGQIQKRLSKRJ
601 18I\XMX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX
602 18H[LFL[ RLPNNPMSMUNWPXSXUWXUZS[P[NZLX
603 15I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX
604 18I\XFX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX
605 18I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX
606 9MYWFUFSGRJR[ ROMVM
607 23I\XMX]W`VaTbQbOa RXPVNTMQMONMPLSLUMXOZQ[T[VZXX
608 11I\MFM[ RMQPNRMUMWNXQX[
609 9NVQFRGSFREQF RRMR[
610 12MWRFSGTFSERF RSMS^RaPbNb
611 9IZMFM[ RWMMW RQSX[
612 3NVRFR[
613 19CaGMG[ RGQJNLMOMQNRQR[ RRQUNWMZM\N]Q][
614 11I\MMM[ RMQPNRMUMWNXQX[
615 18I\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM
616 18H[LMLb RLPNNPMSMUNWPXSXUWXUZS[P[NZLX
617 18I\XMXb RXPVNTMQMONMPLSLUMXOZQ[T[VZXX
618 9KXOMO[ ROSPPRNTMWM
619 18J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX
620 9MYRFRWSZU[W[ ROMVM
621 11I\MMMWNZP[S[UZXW RXMX[
622 6JZLMR[ RXMR[
623 12G]JMN[ RRMN[ RRMV[ RZMV[
624 6J[MMX[ RXMM[
625 10JZLMR[ RXMR[P_NaLbKb
626 9J[XMM[ RMMXM RM[X[
2225 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb
723 3NVRBRb
2226 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb
2246 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O
718 14KYQFOGNINKOMQNSNUMVKVIUGSFQF

96
codegen/timesr.jhf Normal file
View File

@@ -0,0 +1,96 @@
12345 1JZ
12345 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY
12345 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM
12345 12H]SBLb RYBRb RLOZO RKUYU
12345 42H\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX
12345 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT
12345 49F_[NZO[P\O\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\Z\Y RM[KZJXJUKSMQ RMKNMVXXZZ[
12345 6NVRFQM RSFQM
12345 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\T`
12345 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\P`
12345 9JZRLRX RMOWU RWOMU
12345 6E_RIR[ RIR[R
12345 8NVSWRXQWRVSWSYQ[
12345 3E_IR[R
12345 6NVRVQWRXSWRV
12345 3G][BIb
12345 40H\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF
12345 11H\NJPISFS[ RRGR[ RN[W[
12345 45H\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV
12345 47H\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[
12345 13H\THT[ RUFU[ RUFJUZU RQ[X[
12345 39H\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF
12345 48H\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN
12345 31H\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[
12345 63H\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO
12345 48H\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[
12345 12NVROQPRQSPRO RRVQWRXSWRV
12345 14NVROQPRQSPRO RSWRXQWRVSWSYQ[
12345 4F^ZIJRZ[
12345 6E_IO[O RIU[U
12345 4F^JIZRJ[
12345 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY
12345 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\T]Q]O\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV
12345 18H\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[
12345 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[
12345 32G\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[
12345 30G]LFL[ RMFM[ RIFSFVGXIYKZNZSYVXXVZS[I[ RSFUGWIXKYNYSXVWXUZS[
12345 22G\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[
12345 20G[LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[P[
12345 40G^XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXX RQFOGMILKKNKSLVMXOZQ[ RXSX[ RYSY[ RUS\S
12345 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\F RLPXP RH[O[ RU[\[
12345 12MXRFR[ RSFS[ ROFVF RO[V[
12345 20KZUFUWTZR[P[NZMXMVNUOVNW RTFTWSZR[ RQFXF
12345 27F\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[
12345 14I[NFN[ ROFO[ RKFRF RK[Z[ZUY[
12345 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][
12345 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\F RI[O[
12345 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF
12345 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[
12345 64G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF RNYNXOVQURUTVUXV_W`Y`Z^Z] RUXV\W^X_Y_Z^
12345 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUPMP RUFWGXHYJYLXNWOUP RI[P[ RRPTQURXYYZZZ[Y RTQUSWZX[Z[[Y[X
12345 34H\XIYFYLXIVGSFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[Q[NZLXKUK[LX
12345 16I\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[
12345 23F^KFKULXNZQ[S[VZXXYUYF RLFLUMXOZQ[ RHFOF RVF\F
12345 15H\KFR[ RLFRX RYFR[ RIFOF RUF[F
12345 24F^JFN[ RKFNV RRFN[ RRFV[ RSFVV RZFV[ RGFNF RWF]F
12345 21H\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[
12345 20H]KFRQR[ RLFSQS[ RZFSQ RIFOF RVF\F RO[V[
12345 16H\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[
12345 12KYOBOb RPBPb ROBVB RObVb
12345 3KYKFY^
12345 12KYTBTb RUBUb RNBUB RNbUb
12345 8G]JTROZT RJTRPZT
12345 3H\Hb\b
12345 7LXPFUL RPFOGUL
12345 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[
12345 33G\LFL[ RMFM[ RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIFMF
12345 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[
12345 36H]WFW[ RXFX[ RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTFXF RW[[[
12345 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[
12345 22KXUGTHUIVHVGUFSFQGPIP[ RSFRGQIQ[ RMMUM RM[T[
12345 60I\QMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM RONNPNTOV RUVVTVPUN RVOWNYMYNWN RNUMVLXLYM[P\U\X]Y^ RLYMZP[U[X\Y^Y_XaUbObLaK_K^L\O[
12345 28G]LFL[ RMFM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIFMF RI[P[ RT[[[
12345 18MXRFQGRHSGRF RRMR[ RSMS[ ROMSM RO[V[
12345 25MXSFRGSHTGSF RTMT_SaQbObNaN`O_P`Oa RSMS_RaQb RPMTM
12345 27G\LFL[ RMFM[ RWMMW RRSX[ RQSW[ RIFMF RTMZM RI[P[ RT[Z[
12345 12MXRFR[ RSFS[ ROFSF RO[V[
12345 44BcGMG[ RHMH[ RHPJNMMOMRNSPS[ ROMQNRPR[ RSPUNXMZM]N^P^[ RZM\N]P][ RDMHM RD[K[ RO[V[ RZ[a[
12345 28G]LML[ RMMM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIMMM RI[P[ RT[[[
12345 36H\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM
12345 36G\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb
12345 33H\WMWb RXMXb RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTb[b
12345 23IZNMN[ ROMO[ ROSPPRNTMWMXNXOWPVOWN RKMOM RK[R[
12345 32J[WOXMXQWOVNTMPMNNMOMQNRPSUUWVXW RMPNQPRUTWUXVXYWZU[Q[OZNYMWM[NY
12345 16KZPFPWQZS[U[WZXX RQFQWRZS[ RMMUM
12345 28G]LMLXMZP[R[UZWX RMMMXNZP[ RWMW[ RXMX[ RIMMM RTMXM RW[[[
12345 15I[LMR[ RMMRY RXMR[ RJMPM RTMZM
12345 24F^JMN[ RKMNX RRMN[ RRMV[ RSMVX RZMV[ RGMNM RWM]M
12345 21H\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[
12345 22H[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM
12345 16I[WML[ RXMM[ RMMLQLMXM RL[X[XWW[
12345 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\P^Q`RaTb
12345 3NVRBRb
12345 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\T^S`RaPb
12345 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O
12345 35JZJFJ[K[KFLFL[M[MFNFN[O[OFPFP[Q[QFRFR[S[SFTFT[U[UFVFV[W[WFXFX[Y[YFZFZ[