Files
libretroadmin bc87a9a59d Vulkan, OpenGL: modifier volumes and sorted indices from where they are parsed
The parse's arena has a part for each list the card draws from: the
vertices, the indices (with the sorted passes' room after them), and the
modifier volumes' triangles and those cut (rend/modvol_clip.h); a frame's
lists are moved into a slice together (parse_arena_attach()). The volumes'
triangles a frame draws are drawn from there with Vulkan and OpenGL, not
copied into the main buffer or uploaded each frame. With OpenGL the
per-triangle sorted passes' indices are written after the frame's, in its
index buffer, not uploaded to a buffer of their own; the per-pixel
renderer's volume array is set again when its buffer changes.

The heavy disc has a shadow volume a billion pixels off the screen,
first in its list, over a polygon that takes shadows: the volumes' cut
triangles, and those after it, drawn from their part (vk_parse_arena.sh,
gl_parse_arena.sh), which also take the disc with volumes of each cull
mode now.
2026-11-02 16:01:46 +01:00

4820 lines
297 KiB
Python
Executable File

#!/usr/bin/env python3
"""Write a bootable GD-ROM image (GDI + three track files) around the
bare-metal test program in live_prog.c, for tools/threads/live.sh.
Usage: live_disc.py out.gdi [--no-region-array | --mmu-align | --slant | --hscale | --cull | --atlas | --dma | --clip | --keep | --heavy]
live_disc.py out.elf
The program is carried here already compiled, so the test needs no SH-4
compiler; live_prog.c says how PROGRAM was produced. --no-region-array
takes the build of it that renders without ever writing a region array;
--mmu-align the build whose MMU test also asks for address errors on
misaligned accesses; --slant the build with a slanted shaded triangle
over the picture; --hscale that with the screen's renders through the X
scaler as well; --cull the build with modifier volumes and translucent
polygons of each cull mode; --atlas the build with textures written a few
bytes at a time; --dma the build with video memory written by DMA over
pictures rendered to it.
The image is the least the core's HLE BIOS needs to boot it: an IP.BIN
whose bootstrap jumps to the boot file, and an ISO 9660 volume holding
1ST_READ.BIN.
"""
import os
import struct
import sys
# Where live_prog.c's live_verdict is in PROGRAM, for headless.sh: what
# `nm` says of it in the ELF file PROGRAM was made from. To be kept with it.
LIVE_VERDICT = 0x8c014048
PROGRAM = bytes.fromhex("""
01df02d02b40090000f0008c240e018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018cf47ff361319221214d6229444c602d9323673927
7b2011812c60128100e013815d6229455c6029233b2014812c6015810fd101e2
20211871a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f362
09d706e1256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa0
18705fa0a086010080705fa027d100e220210c71602163621942047120210871
a0e2202122d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed34562
21231041fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d
536400e014d70174180063610a3101416362017202e33232078d017105a001e1
194224041041098d027071622d62036301736233f48f2405f5af104107d11061
0b0001e00b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0
862f962fa62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba0
09e0fc840fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288
608f01e0f3620c7225840c63284326840c6118613b2127840c600b21b9931c33
b8922633018b9ea001e08828488d83605cd222621032018b97a002e00ee6f365
59d457d00b400c750820018b8fa009e0f3600c700184118801898aa003e0f360
0c7004840188018985a003e0f3600c7005840288018980a003e0f3620c722b84
0c6328432c840c6118613b212d840c622b217e922c317d922631018b6fa003e0
64e6f36541d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce9
38d2122248a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af
6f801049088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca0
0ae01c311042068dff736821f9891c314a21f7af1d611040068954622c621842
2a217363f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c62
136319433032228ff3622b840c621c611032ffe00a600840707f264ff66bf66a
f6690b00f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf
0900e9af09e0e7af04e0e5af04e0e3af04e0a8fd2b01800021100900e030018c
ec06018c1480018cd430018cc830018c00800000ffff00000ad1422104715221
01e109d21222087212220472122207d1226001c8018d1041fa8b05d1126001c8
0b00290004745fa00c745fa000093d0018745fa0626113671947014725922821
ffe22a62436300432903136001402444136019407a2001c8108943605c302a23
063429073a2773611841236318433c333b21203729022b210b00122643605830
2a2346302907eeaf3a27000249d1126249d11032048d00e248d122210b0000e0
47d148d2122248d221521032718b47d112600188028d11e00b00090044d345d1
3111047144d2292144d645d772166c921b222316726230325d8f00e341d23222
736301e77223226360922033558b39d2215337d22033df8f13e03bd23bd33112
3bd334d733173bd773123bd226164e921b22271639d222623032cd8f16e038d2
2dd3392243932b23371624d305e7722332d332672fd33037318b32d32fd73227
29d7735730372c8b22d3335728d33037b28f18e02cd778162a977b2119162bd1
01e332212ad1126321d11033a48f19e025d338167b22291624d102e2222124d1
126220d110320e8f00e220d122210b0001e00b0011e00b0012e00b0013e00b00
17e00b0018e00b001ae01601c0003601340109000000001044332211100000ff
88776655040000100050018c4040018c5555aaaafc5f018c00f0ff1f0040018c
001000104440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c00030001008300010
0070018cc1c1c1c100400010000000ff08400010862f962ff45110d2222210d8
422810d0522010d4122410d5622510d6722610d7122710d3f25992238302f359
9222122800e11220122412251226122712238302f6690b00f6680900000000e0
040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0862f962f
a62fb62fc62fd62fe62f224ff07f536b636a7369fd5e2ad11b24431f29dd422d
00e829d1822129d282220871822108728222087182210872822208718221830d
e21f611f722f22dcfc575366a3650b4cb364e21ffc52211f922f2367b366a365
0b4c93641bdee21fa11f922ffc57b366a3650b4cb364f351122d17d112d21222
12d182210872822208718221087282220871822108728222830de21ffc51111f
922f1367b366a3650b4c9364107f264ff66ef66df66cf66bf66af6690b00f668
00000081000000e0040000e0080000e0b40b018c0000803e00000024224ff87f
f351111f722f6367536643650cd10b4100e40cd200e112220bd3122304731223
04731223047312230473122304731223047312238302087f264f0b0009000900
1c0c018c000000e0040000e0862f962fa62fb62fc62fd62fe62ff75cf85bf95e
24d14b2124d2122224da25d1122a25d9522925d8622825d000e1122024d51225
24d6122624d312238302436d2b2dd222b22ae229c22812201225722612238302
d222b22afb5bb229c22812201bdbb225722612238302d222fa5dd22ae229c228
b220122572261223830215dddb244222fa54422afb5dd229c228b220b2257226
12238302f66ef66df66cf66bf66af6690b00f66800000080000000e0040000e0
000000c0080000e00c0000e0100000e0140000e0180000e01c0000e00000803f
000000f0862f962fa62fb62fc62fd62fe62f224fbc7fc07f9bd112619bd22665
266622679ad2266322625b216b217b213b212b2144e0160f96d11060fec90021
ffe295d322230473222300e204732123106001cb002191d1126091d3392005cb
022118718fd33221f471222110718ed222216c718dd222219c718dd222210471
8cd2222110718cd222218cd18cd212228cd212228cd18dd222218dd600e38dd8
8dd412e745330a02094223611c3113652c355c353369583953609c3008408e01
122601731047ed8f047684d184d2222184d185d22221047184d22221047184d2
222184d1c59222210471c392222104711fe222210471be9222217fd27fd310e1
32221041fc8f04727dd1b59222213c717cd222210871077222217bd27bd3ac91
32221041fc8f047279d17ad77ad310e27221a3961c3632261042f98f047177d1
77d2222104719a92222176d276d310e132221041fc8f04721fe174d2122274d2
122274d100e002ea00e973d807e41fe58697869317e6d62f019d230df66d5420
1043058d017726657035f989f8af63616ad227536ad22033648d48e001e1160f
10e168d212220472122267d267d30ce132221041fc8f047200e163d212220472
122263d163d2222163d164d2222164d12e4164d1ffe700e308e2722131111042
fb8f08715fd360d1122360d260d1292148977b2111135fd1122200e111125ed2
12225ed212225ed105e222215dd00b40090040e7fc3700175bd1eee233932021
5ad71c3720275ad71c37202759d71c3720271043f38f017157d458d00b4005e5
082001ee028de61fb4a0090054d00b40090054d454d10b41092454dcc36dc51f
bda200ee52d2205335d22033978996af01e1007ce003ff7f8001800000101f7c
e00700f836010048846c5fa0f46c5fa0c0785fa00400d8ff0800d8ff44805fa0
000080003f7d1700000020000401150000007f020000df0177df270000001000
20805fa028815fa08c805fa0000000030c0010a55831018cabaaaaaa88805fa0
17b7d138000010a500000002000080200000003004905fa0001000a403030303
74805fa000ff000000825fa080800000002006a4050505050606060614905fa0
1ffc0000000006a4070707071c985fa01c9c5fa0004006a4ffff0000c040018c
11111111380000ff000018a500000080180018a54c0e00a02c805fa000001800
a800018c0040018c000000100050018c00f0ff1f443322114040018c000000ff
100000ff2c0a018c000023ac0000ffff0000feff0000fdff5eb000006c06018c
6600018cff7fffff6c00018c2031018c0041018cbd9562d462d00b4009000820
028fe61f42af09005fd460d00b4005e50820018ba3a002ee5dd8ab9b59da5dd9
b3650b4a83640820018b9aa002eea1900c389038f58fb36553d454d00b4008e5
0820018b8fa003ee959553d44dd00b4009000820028f10e187a003ee4fd650d2
20677c6764633c633037028d10417ea004eef58f01724bd17b9210677c674ad3
1c3330633c633037028d1042a8a005eef38f017145d16c9210677c6744d31c33
30633c633037028d10429ba006eef38f017135d435d00b4002e50820018b93a0
08ee3cd13cd2222104715592222101e13ad21222087212220472122238d12260
01c8018d1041fa8b36d1126001c8028ffc717ba009ee00e222210471126001c8
018975a00aee30d1379202a009000c8d017110677c672dd31c3330633c633037
f58d10420beeb1aee61f29d110611c61249220315e8f0cee26d110611c612031
5a8f07ee24d110611c612031568b23d110611c612031538b00ee97aee61f95ae
e61f93aee61f91aee61f8faee61f8daee61f00280004004000180010ee000900
0000200c9809018c5eb000006c06018c0000210c0028210c0000220c4831018c
000020ac000021ac0000ffff000022ac0000feff04745fa00000230c0c745fa0
801a060018745fa0000023ac0000fdff001023ac002820ac002821ac004022ac
54aee61f52aee61f50aee61f4eaee61f4caee61f4aaee61f48aee61f46aee61f
44aee61f017993600888038f936800a1017e936807e00d4846911928936001c9
0b2870e0860fd26af553326bf3667076b3651ed70b47a364071ff36778778366
b3651bd00b40a36440e2fc322e51f7501030318f70e02f5127922921fe022031
028de82ed1a001eecc8ff366860f7076a3650ed70b47a364036bf36678768365
0cd00b40a36440e2fc322e51103b0189bda002ee2f51089339212c522031b28d
017902ee0aa0e51f00030103d409018c1000018c2c00018c01eee51f59d10b41
00e859d00b400900036158d956db0b4b136aa230058f0361a030ffe22a381049
f58b63e1163801ee028fef1f07a209004fd850d1122850d10b41090082624fd3
4ad1326001c8018d1041fa8b4bd11261136001c9081f136001c8018910a202e0
43d1126343d11033018b0ba203e040d1126040d11032038dff88018904a201e0
3bd11260ff885e893ad222213cd13dd2222104713cd222210471629222213bd1
3bd22221147101e2222113622fd1226001c8018d1041fa8b2dd112611c611360
0688018909a204e029d22260294019403088028d747202a204e022632dd22033
0189fea105e022d222d3322224d22ad33222047224d33222047228d332220472
27d33222047227d3322227d727d320e2322701731042fb8f04771cd21cd33222
147201e33222236310d2326001c8018d1042fa8b0ed22260ff88048922600c60
07880089181fa0a1090057afe51f55afe51ff5500470051fe3600a882889f8ae
00e902200c06018c3c06018c80841e0000e100ac785634128c05018c186c5fa0
00e000ac0000008000e1000c046c5fa000e0000c56657273220000800c010022
000000020000006414e000ac0000dec0047d73d1103d018912adc51f71d8836c
057cf36a547a70db84600c69ab80f3640b4b5f74036168e0982929022031028d
160f19a103eeab840c61c8909b201030028dc03812a103eee68b64d8836e147e
63dd64dc64db65da0b4d0900051f8669f36678769365f3640b4c747440e3fc33
3e52f361707110320189f9a004eef3617471a490fe0210320189f3a004ee3c52
f5512a219a21b9213f533a22a9222b211821028de038e7a004eed58b50d00b40
f36b036a4fd9936e187e4fdd6c7b4fdc96680b4d83640038028d02e0d6a005ee
0a2868e0860fb365f3640b4c68740038028d40e2cca006eefc322b51b031028d
903ec7a006eee38b41d1181241d1191241d93dd80b48936440dbf3640b4b6074
3fd40b4807eef3640b4b64740b489364f3643cd10b41687440e7fc377a527851
1032478fe51f36d11a17f3656c75f3642ed00b406874f36432d10b41687440e1
fc311a521951103208ee338fe51f2ed00b4009ee01882d8fe51f2cd00b400aee
0188278fe51f2ad483600b400bee20d428d00b40090028d110301b8fe51f27d4
24d00b4009000188148fe51f24d140e0fc30181000e11a10f3656875f36421d1
0b41607440e3fc333a52385110320cee028de51f42ae0900a36435a083608000
4831018c1831018c4800018c0431018c6600018c5000018cf2830070f3830070
8400018cec30018c7200018c7a00018c0000803f00000040010004008005018c
010024008605018c8a00018c9800018c01000c006805018c000080bf01000080
785634127605018c0b40090044d800e1122844d10b41090082627e9110320dee
088fe51ff36440d00b4068740788138f00eee51ff2ad0900f0ade51feeade51f
ecade51feaade51fe8ade51fe6ade51fe4ade51fe2ade51f0eeedfade51f33d9
926833d10b41090064e1122931d120e22221136230d1226020c8018f1041fa8b
2ed00b40090029d182212ad120e2222103619c7102e2263129011c31d8ad1f1f
03a0081f01a0081f081f25d1126425d125d22363136600e020e7336528354075
5026017600231047f78f01731cd31fd77223dc7300e772231dd7122704772227
047710e662271997722323651075136000eee71f01e808a010e3d6af081fd4af
081fd2af081f1043248924666c6604677c677036f789f6af871f800111540900
4440018c2c05018c4005018cc8805fa00c06018c00695fa080841e003c06018c
4000a0ff9040018c7040018c018200001000a0ff6ed220622822038901922302
09009e156bd2226210711032228df75ee82e018f03eee71f67d268d112220171
111267d100e332213111321133113411351164d732275fd32223136504731223
047304e66223a893322710715bd004e813a004e35cd112615031d98ff75e5bd1
12611821d48ff75e56d1126002c8d38fe82eceaf090010430789f75ee82efa8f
56660036f789f6af871f4dd334533823048ff75e47d3326330322589e82e2a8d
05ee00e247d122212471422148d149d33b2149d3222349d249d7222732632033
1b8d00e244d3222341d3222345d222213263203301ee248fea1f126241d11032
1b8ff3611fa0787137d222621032d58ff75ed7af00e2d4afe71f726337d22033
ffe22a622a1f00e233d3222330d3222334d2222132632033df89fa5eeb610271
1a1ff3617871399221213890118158e012810fe0138133901481329015812ad1
00e220211871a0e2202128d228d1206008c8018f1041fa8b24d1106008c81a8d
09eef362787223d306e1256771231041fb8b21d10fe2222120d1139222210471
f072222100e11ed30d940d950d961dd80c994aa000e2ecafe61f314420010002
000383001f0fff0077772c01a10f09008040018c1000a0ff6840018c0100feca
5040018c1c00a0ff1400a0ff1800a0ff4c40018c000000e0000014a50df0ad0b
000014e52143341284705fa018705fa0a086010080705fa0002870a0402070a0
000081a04b1714060a071360783001400c37f5e00d4797071a0013670837d59e
ec3771230172027361714632ec8f85315123017202736032f78f617100e16cd2
1222047212220472c193322204721fe332220472bc9332220472122204721222
0472122263d1b4922221047160e2222161d100e0ae9500e6ad97ad935fd25630
d62f019d230df66d6813612101707030f58f027100e15ad21222047212220472
9993322204721fe3322204729093322204721222047212220472122204728c93
3222047248e3322288924ed32223047322230473222304732223047322234ad2
12220472122249d17992222148d600e7769048d47598759373620922236106e5
5d412c311c312c3145310a021365283501455c321942094287021a022831629e
ec31112601771043e68f027600e13ad212220472122204724d93322204721fe3
322204724493322204724d933222047212220472122231d13b922221047160e2
2221d87141922221f65007e11d401fcb40e2fc32061200eeeb1fee1fed1fffee
ec1f00eee91f42a700e8188d5a884d8f648823d12a922221019023008360f011
20d10b4102e4ffa109001ed10b4103e4faa109001bd10b4104e4f5a109001ad1
15922221019023008360c41130f800011f3c1f0fff07001070170f0f00190242
ff0fcf07011019fc00780342e003e07f040070a0240070a0000082a090e80000
840070a0ac0070a0c00070a0800070a0000083a06b6f4606040170a0240170a0
1c985fa0e405018c10905fa002890c911038138b06d107d2222183606488178b
05d10392222113a00900c8001f7c0900000070a001c200001c9c5fa0e7911038
0389019023008360101173d173d2222173d174dc122c74d1126340e2fc323312
72dee2644412c265551201e2222120e1122e6fd1122c6fd16fd612266fd71227
6fd170d0122070d1141f131f00e9921f911f6ed2222f6eddba9700e66dd50b4d
00e46ddbb41fb31f921f911f6bd1122f6bd700e667d50b4d00e46ada922a6ad3
92236ad492246ad592256ad692266ad792276ad092206ad19221830affe369d2
322210e1122e68d1122c68d152d4122452d5122552d753d67226b41fb31f921f
911f52dee22f62d700e652d50b4d00e4922a55d0922055d1922155d2922255d3
922355d4922455d5922555d69226830affee54d7e22757d112611821018b5ca1
01e255d1126177e22631028f01717ba1090051d2122251d112600820018bd9a1
090009e11630018b1ca20a8801704bd102212dd14ce0fe044221047150e0fe05
5221147154e0fe066221087144d22221047144d2222144d111600d6043d11161
1f88028f1d6114a2090041d641d240e1236740e361271043fc8f027729901041
f68f0c322691163829023bd1088f222119d13ad222211e911038018b38d11061
18d117d2222134d112611821018902a2ffe718de33dcc41f13d1131f32dbb21f
32ddd11f11daa22f11d961a0ffe7a0000080000103010601000070a001820000
0000200060805fa048805fa04c805fa00000700100007f0068805fa06c805fa0
0000008044815fa0000000430000003f4c0d018c00008020000080429a99193f
ff0000ff000000e0040000e0080000e00c0000e0100000e0140000e0180000e0
1c0000e014805fa00000740100003f0000ff00ff2480018c2080018c1880018c
00007f020000df01140a70a4c80a70a400f80000804070a42880018c0000c700
010071a00000dc4200008c420000004200e6c3940b49e365c41f61d1131fb21f
60d1111fa22f60d760d5b7940b4900e6c41f5fd1131fb21f5ed1111fa22fffe7
5dd6ac940b49e3655cd1141f5cd1131f5cd1121fd11fa22fffe700e65ad50b49
00e45ad1141f5ad1131f5ad1121f5ad1111fa22fffe759d659d50b4908e459d1
59d2222159d25ad332220472e222047200e33222047257d33222047232220472
322204723222830100e048dd52dc13634edb52da52d953d400e253d563a104e1
1638018bf3a6836050d151d2222151d1ffe2222150d10b41090050d110600fc9
0688018be4a409004dd1126118211f894cd1126118211b8f0820028d09e148a5
01e240e3fc331e131f1347d1126004e700e600e5f3640b40787478e0fe011821
028d01e241d1222141d2226101711222c3a483603fd12cae09003fd122213fd2
222c32d132d22221b41fb31f921f911f2bd1122f3ad700e63ad50b4d00e4922a
22d29222047292220472922204729222047292220472922204729222830a25d1
ffe2222187ae09002fd111611d612fd00031f7892ed101e27dae222180008800
0000304300001043ffffff800000908000009043000040430002003000005c42
0000c0420000f0410000002000002f43000096430000fa4200007a4300000e0c
24008020000000e020000080040000e0000000c00000803f000043430c0000e0
0000003f100000e0180000e044815fa00000008014805fa08c05018c8c705fa0
1080018c0880018cbc00008c0080018c0c80018c000020002480018c00007801
ff00ffff00008020280a78a41ff800001c80018c54daa26c54d1cb21122a54d1
10e22221147153d2222153d153d212220472122252d153d2222153de53dbb41f
53d1131f00e9921f911f52d1122f52dd869700e6e3650b4d00e4b41fb31f921f
911f4ed1122f4ed700e6e3650b4d00e44cd192214cd292220472922204729222
04729222047292220472922204729222830146d1ffe22221c22a45d101e22221
e7ad0900fc8b43d111600d60407111611f88078d1d6140d101e222213cd10be2
d7ad22214d922c313cd33821f689f2af090046977c3139dee821068b36d11261
1821058936d6e1ad090035d6dead09003896dbad090033d1141f33d1131f33d1
121f33d1111f33d1122f00e61ed522d10b4100e4edad090029071ceeed473b27
722340e7fc377357722b2bd76227922a22240c77222729dee225087722278303
1041518d017002c840e6fc36d3160089c31601c822d6df8d038822d6ddaf2907
00802004e0070900f4805fa0000001004c805fa000007c0100003f0068805fa0
44815fa0000000800000802000008042000000430000003f4c0d018c9a99193f
ff0000ff000000e0040000e014805fa01880018c200a7ca41c80018cdfff0000
00f800000000484300809f4300007042000052436666663f080000e00000803f
0000574300006b4385daa41f85d1131f85d9921f85d1111f85dee22fffe785d6
85d586d00b4008e4a41f85d1131f921f84d1111fe22fffe783d684d57fd10b41
08e483da83d4422a83dd84d2222d84db84d1122b84dc85d6622c00e984d39223
84d5922584d7922784d09220830ab22a83d1122d83d7722be22c92239225ffe2
087322239220830ab22a122d7ed3322be22cfc7592257dd1f870122008752225
08709220830ab22a79d0022d722be22cf8751225047592250475222504759225
830a74d5522a022d322be22c68d01220047012200470222004709220830a422a
5ed4422d6cd4422b622c61d69226f870922061d492240c769226830ab22a67d6
622d722be22cfc709220fc7492240870222008749224830ab22a622d322be22c
53d69226fc701220fc7422240c769226830ab22a5ad6622d722be22c4cd71227
9220222408709220830a522a622d322be22c122747d3122322249220830a51d2
241f131f621f50d1111fe22fffe737d5559432de0b4e00e64cd1122a37d0022d
32d1122b4ad1122c30d339d232222ed538d4522438d6922638d79227830a00e3
00e2c36b636affe9736421a004e5236740d141dc236641dddb2725dd722d26de
022e27d0c2201ad7722b29dc122c29d76227922a2224830d122d622e9220222b
222c2227222a2224830d10456c8d017302e1336002c8028d392170a401c801c8
01892da403882ed01821d08f13672adcd1af13662ad027d12adcccaf13668000
00006b430000f04100005743000020410000003f00c00034002080204c0d018c
00005c4200000c4200c0003600008020000000e008000080040000e0000000c0
080000e0002480200c0000e000c80088100000e0140000e0180000e01c0000e0
0000f0420000e041000050420000004300002043080000f00004802000002443
000040430000604300008042c8000080000200300000803f00005643c80000e0
0000484300006c43d36a00e9922de36d922e036c9220087e922e087092209227
9cd292229cd39223830a9cd59cdbb11f9cd1122f9cde9dd753660b4e00e4b11f
9bd1122f9bd79cd69cd50b4e00e49cd1122a922d922c9bd4922402e29ad52225
06e19ad612268bd722278bd01220830ab11f92d196d797d697d598d40b4e122f
922a922d922c8fd292228fd392238fd4922480d5922580d69226830a90d7741f
90d1131f90dee21f90d0011f90dee22f90db91d691d592d40b4bffe788d1141f
90d1131f88d2221f8fd1111fe22f8fd68ad58bd40b4bffe7922a922d922c79d3
922379d4922479d592256ad692266ad79227830a86d0041f7cd1131f85d2221f
85d3311f85d4422f85d786d586d40b4b00e67fd5541f85d6631f7ed7721f84d0
011f84d1122f84d77ed57fd40b4b00e6922a922d922c63d2922263d3922363d4
922454d5922554d69226830a7bd17cd222217cd1141f7cd1131f7cd1121f7cd1
111f7cd1122f7cd700e67cd50b4b00e451d7741f7ad1131f6cd0021f79d1111f
e22f79d779d582940b4b00e6922a922d922c4cd192214cd292224cd392233dd4
92243dd59225830a71d6622f71de72d772d673d573d40b4e09006dd7722f72d7
72d673d573d40b4e09003bdee41f47d0031f56d1121f50d2211f50d3322f50d7
50d551d40b4b00e6e41f50d4431f421f4fd5511f4fd6622f4fd74ad54ad40b4b
00e6922a922d922c2ed792272ede922e2ed092201fd192211fd29222830a5ed1
ffe22221349110380189e3ab09005bd25bd1226001c8018d1041fa8b59d15ad2
22215ad15ad2222104715ad22221047159d22221047134d22221047157d22221
57d358d220e1222301721041fb8f047355d156d22221147101e22221136248d1
226001c8018d1041fa8bb6ab0900800096000900180000e01c0000e00000a042
0000403f0000c8421c0c018c0000704300006f43000074430000524300005c43
000000200c0000e0100000e0140000e000000043000044430000804200000200
00005c42000068430000f041000048430000003f4c0d018c00c4003000009020
0800000400008d4300007a4300c6003000002a430000024300000c439a99193f
ff0000800000909400000002000034430000f0429a99993e0000ff8060815fa0
000000800000d84200008c420000be42000020423333333fffff00ff00008020
0000964300008043ffffff80000090806666663ffc0c018c0000d44200008242
0000c2420000344200004d4300009143000039430000874314805fa0186c5fa0
80841e0000e100ac7856341200e000ac2200008000e1000c0c01002200000065
14e000ac0001dec0046c5fa000e0000c63d222610171122283603c88028f4288
a9a00900048ffb5ee82e018ba8a009005cd10b4109005cd10b4110e45bd11262
83639c73aa911633028ff951c6a009002831fc5e163e008b1c1ffd5e123e0089
1d1ffe5e1c3eee1f291f00e148e0fe022822038d1821018922a10900028d3fe1
12a1fd521638018bc2a08360017883603c88028f3ce1cda809001638018bb4a8
46881e88028f2d88baa80900028f0f88bba8090001899fa183603dd10b4101e4
836208422c3208428c32184209428c326591192283603fc9036108410c311841
34d33c3134d321211043fc8f0271a1aa090032d1222100e131d210220c720ae3
3022047210222fd1a0e220212ed22fd1206008c8018f1041fa8b2bd1106008c8
238d13e26871212100e221210ae3312121212121212124d224d1206008c8018f
1041fa8b20d1106008c811896871116211601162116211611ad220620fc91840
1c610b211ad257af12221ad1faaf090018d1f7af090018d00b4000e404a00b1f
15d00b4001e40b1f06d10b41090006d10b4110e405d1126267af291f9500ff7f
1080018c0c06018c4c06018c0c00d8ffe405018c000000a500a000000880018c
84705fa09c705fa018705fa0a08601000480018cffff0000a007018caa911038
1f8ff55ee82e1c8956d1a493322156d1ec31291f55d2122255d112611821078d
8360226253d11032038f01c8c2a00ae201c8018be1a009004fd150d2122236af
017887911038b78fce71fd53fc5ee8331633268dfe5e4ad3ec337d911633268d
44e0fe000820278df65e3ed175933221291ffe5e42d2ec326e9116325e8d44e0
fe0008205d8ff65ee82e5d8f48e0fe0008205c8fff5ee82e278df85039d1b9af
ec3130d15a93322137d1b3af291f2dd155933221ddaf291fe82e0e8d58e029d1
fe000221291ffd52fc5ee832449116322dd19f8dfe5ecdaf0900291fd6ae01e1
20d13d922221efaffd520820038df75e26d18faf0c31e82e028925d18aafec31
fa5ee82e028923d184afec31fb5ee82e038d40e020d17dafec3101e1fe021732
038f40e01dd175af2c31fe000188028910d16faf09001ad16caf090019d169af
090019d166af090018d163af090018d160af0900fa00e003c8001f7c007cff03
007e090010905fa00001d0ba4840018c1080018c0d600d600000400050805fa0
43c721fe0008d0ba0200d0ba0009d0ba000ad0ba000bd0ba000dd0ba0007d0ba
4d4d0d600300d0ba0400d0ba0500d0ba0600d0ba5bd11261c971263112895ad1
12611821138959d11262a9911032028957d108a0090057d1126118210a8956d1
01a0090055d156d2122221af836055d1f9af090054d1f6af090054d11daf0900
29071ce61821028d6d47d3ab090050d050dc51d69fab090003c9038801890fa9
3fe13fe11638028d83605aae836201c8018b3fa9090049d1019c230c0900d4ee
47d222621071203102ee068fe71f45d11261503102ee048de71f019223020900
58ea01912301090096ea3360038829071ce11d473cd038d136dc6cab1366f48f
182139d091ab09004121017002715630058f20c8d62f019d230df66d8eecf38f
2364f1af336401a093628362212101700271a630f78f0388f78d46302c8f6630
2c8b312101705888f38f027127d12892222127d227d1292127d33b2113662367
e07726d518e352271043fc8f047724d30ce77223fc7310e7722322d708e37221
01771043fb8f047183061ed700e101e60195230508e350dfc8af5362c6af7362
280680000c80018c0880018c0480018c030cd0ba0080018c040cd0ba010cd0ba
4840018c020cd0ba9d5a0d60000020000000484300006c430000803f00004000
1000a0ff1400a0ff000070431c815fa0e040018ce0ffff03000000e011111111
3c0000ffe0ffc000400000006400000000000000400100000e00000000000000
100000000a0000000000000001000400000004000300040001000c0001002400
01000400010000000200000000010000000200000303000000017f80ff000000
000000000100000002000000ffffff7f0000008001000080ffffffff78563412
efbeadde000001005345474120534547414b4154414e41200000000000000000
17b7d1380000000000000000ffffffff000020440000000017b7d1380000803f
00000000ffffffff000000000000f04317b7d138000000000000803fffffffff
""")
# The same program built with -DNO_REGION_ARRAY.
PROGRAM_NO_REGION_ARRAY = bytes.fromhex("""
01df02d02b40090000f0008c240e018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018cf47ff361319221214d6229444c602d9323673927
7b2011812c60128100e013815d6229455c6029233b2014812c6015810fd101e2
20211871a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f362
09d706e1256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa0
18705fa0a086010080705fa027d100e220210c71602163621942047120210871
a0e2202122d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed34562
21231041fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d
536400e014d70174180063610a3101416362017202e33232078d017105a001e1
194224041041098d027071622d62036301736233f48f2405f5af104107d11061
0b0001e00b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0
862f962fa62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba0
09e0fc840fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288
608f01e0f3620c7225840c63284326840c6118613b2127840c600b21b9931c33
b8922633018b9ea001e08828488d83605cd222621032018b97a002e00ee6f365
59d457d00b400c750820018b8fa009e0f3600c700184118801898aa003e0f360
0c7004840188018985a003e0f3600c7005840288018980a003e0f3620c722b84
0c6328432c840c6118613b212d840c622b217e922c317d922631018b6fa003e0
64e6f36541d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce9
38d2122248a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af
6f801049088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca0
0ae01c311042068dff736821f9891c314a21f7af1d611040068954622c621842
2a217363f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c62
136319433032228ff3622b840c621c611032ffe00a600840707f264ff66bf66a
f6690b00f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf
0900e9af09e0e7af04e0e5af04e0e3af04e0a8fd2b01800021100900b430018c
ec06018c1480018ca830018c9c30018c00800000ffff00000ad1422104715221
01e109d21222087212220472122207d1226001c8018d1041fa8b05d1126001c8
0b00290004745fa00c745fa000093d0018745fa0626113671947014725922821
ffe22a62436300432903136001402444136019407a2001c8108943605c302a23
063429073a2773611841236318433c333b21203729022b210b00122643605830
2a2346302907eeaf3a27000249d1126249d11032048d00e248d122210b0000e0
47d148d2122248d221521032718b47d112600188028d11e00b00090044d345d1
3111047144d2292144d645d772166c921b222316726230325d8f00e341d23222
736301e77223226360922033558b39d2215337d22033df8f13e03bd23bd33112
3bd334d733173bd773123bd226164e921b22271639d222623032cd8f16e038d2
2dd3392243932b23371624d305e7722332d332672fd33037318b32d32fd73227
29d7735730372c8b22d3335728d33037b28f18e02cd778162a977b2119162bd1
01e332212ad1126321d11033a48f19e025d338167b22291624d102e2222124d1
126220d110320e8f00e220d122210b0001e00b0011e00b0012e00b0013e00b00
17e00b0018e00b001ae01601c0003601340109000000001044332211100000ff
88776655040000100050018c4040018c5555aaaafc5f018c00f0ff1f0040018c
001000104440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c00030001008300010
0070018cc1c1c1c100400010000000ff08400010862f962ff45110d2222210d8
422810d0522010d4122410d5622510d6722610d7122710d3f25992238302f359
9222122800e11220122412251226122712238302f6690b00f6680900000000e0
040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0862f962f
a62fb62fc62fd62fe62f224ff07f536b636a7369fd5e2ad11b24431f29dd422d
00e829d1822129d282220871822108728222087182210872822208718221830d
e21f611f722f22dcfc575366a3650b4cb364e21ffc52211f922f2367b366a365
0b4c93641bdee21fa11f922ffc57b366a3650b4cb364f351122d17d112d21222
12d182210872822208718221087282220871822108728222830de21ffc51111f
922f1367b366a3650b4c9364107f264ff66ef66df66cf66bf66af6690b00f668
00000081000000e0040000e0080000e0b40b018c0000803e00000024224ff87f
f351111f722f6367536643650cd10b4100e40cd200e112220bd3122304731223
04731223047312230473122304731223047312238302087f264f0b0009000900
1c0c018c000000e0040000e0862f962fa62fb62fc62fd62fe62ff75cf85bf95e
24d14b2124d2122224da25d1122a25d9522925d8622825d000e1122024d51225
24d6122624d312238302436d2b2dd222b22ae229c22812201225722612238302
d222b22afb5bb229c22812201bdbb225722612238302d222fa5dd22ae229c228
b220122572261223830215dddb244222fa54422afb5dd229c228b220b2257226
12238302f66ef66df66cf66bf66af6690b00f66800000080000000e0040000e0
000000c0080000e00c0000e0100000e0140000e0180000e01c0000e00000803f
000000f0862f962fa62fb62fc62fd62fe62f224fbc7fc07f94d1126194d22665
2666226793d2266322625b216b217b213b212b2144e0160f8fd11060fec90021
ffe28ed322230473222300e204732123106001cb00218ad112608ad3392005cb
0221187188d33221f4712221107187d222216c7186d222219c7186d222210471
85d22221107185d2222185d185d2122285d2122285d186d2222186d600e386d8
86d412e745330a02094223611c3113652c355c353369583953609c3008408e01
122601731047ed8f04767dd17dd222217dd17ed2222104717dd2222104717dd2
22217dd1b69222210471b492222104711fe222210471af92222178d278d310e1
32221041fc8f047276d1a69222213c7175d2222108710772222174d274d39d91
32221041fc8f047272d173d773d310e2722194961c3632261042f98f047170d1
70d2222104718b9222216fd26fd310e132221041fc8f04721fe16dd212226dd2
12226dd100e002ea00e96cd807e41fe57797779317e6d62f019d230df66d2820
1043058d017726657035f989f8af636163d2275363d22033558d48e001e1160f
10e161d212220472122260d160d2222160d12e4160d1ffe700e308e272213111
1042fb8f08715cd35cd112235cd25dd1292148977b2111135bd1122200e11112
5ad212225ad212225ad105e222215ad00b40090040e7fc37001758d1eee23393
202157d71c37202756d71c37202756d71c3720271043f38f017154d454d00b40
05e5082001ee028de61fada0090051d00b40090050d451d10b41092450dcc36d
c51fb6a200ee4fd2205336d22033a689a5af01e1007ce003ff7f800180000010
1f7ce00700f8360100480900846c5fa0f46c5fa0c0785fa00400d8ff0800d8ff
44805fa0000080003f7d1700000020000401150000007f020000df0177df2700
0000100020805fa028815fa08c805fa0000000030c0010a52c31018cabaaaaaa
88805fa017b7d138000010a500000002000080200000003004905fa0001000a4
0303030374805fa000ff000000825fa080800000002006a40505050506060606
14905fa01ffc0000000006a4070707071c985fa01c9c5fa0004006a4ffff0000
c040018c11111111380000ff2c805fa000003000a800018c0040018c00000010
0050018c00f0ff1f443322114040018c000000ff100000ff2c0a018c000023ac
0000ffff0000feff0000fdff5eb000006c06018c6600018cff7fffff6c00018c
f430018c0041018cbd9562d462d00b4009000820028fe61f49af09005fd460d0
0b4005e50820018ba3a002ee5dd8ab9b59da5dd9b3650b4a83640820018b9aa0
02eea1900c389038f58fb36553d454d00b4008e50820018b8fa003ee959553d4
4dd00b4009000820028f10e187a003ee4fd650d220677c6764633c633037028d
10417ea004eef58f01724bd17b9210677c674ad31c3330633c633037028d1042
a8a005eef38f017145d16c9210677c6744d31c3330633c633037028d10429ba0
06eef38f017135d435d00b4002e50820018b93a008ee3cd13cd2222104715592
222101e13ad21222087212220472122238d1226001c8018d1041fa8b36d11260
01c8028ffc717ba009ee00e222210471126001c8018975a00aee30d1379202a0
09000c8d017110677c672dd31c3330633c633037f58d10420beeb8aee61f29d1
10611c61249220315e8f0cee26d110611c6120315a8f07ee24d110611c612031
568b23d110611c612031538b00ee9eaee61f9caee61f9aaee61f98aee61f96ae
e61f94aee61f00280004004000180010ee0009000000200c9809018c5eb00000
6c06018c0000210c0028210c0000220c1c31018c000020ac000021ac0000ffff
000022ac0000feff04745fa00000230c0c745fa0801a060018745fa0000023ac
0000fdff001023ac002820ac002821ac004022ac5baee61f59aee61f57aee61f
55aee61f53aee61f51aee61f4faee61f4daee61f4baee61f017993600888038f
936800a1017e936807e00d4846911928936001c90b2870e0860fd26af553326b
f3667076b3651ed70b47a364071ff36778778366b3651bd00b40a36440e2fc32
2e51f7501030318f70e02f5127922921fe022031028de82ed1a001eecc8ff366
860f7076a3650ed70b47a364036bf366787683650cd00b40a36440e2fc322e51
103b0189bda002ee2f51089339212c522031b28d017902ee0aa0e51f00030103
d409018c1000018c2c00018c01eee51f59d10b4100e859d00b400900036158d9
56db0b4b136aa230058f0361a030ffe22a381049f58b63e1163801ee028fef1f
07a209004fd850d1122850d10b41090082624fd34ad1326001c8018d1041fa8b
4bd11261136001c9081f136001c8018910a202e043d1126343d11033018b0ba2
03e040d1126040d11032038dff88018904a201e03bd11260ff885e893ad22221
3cd13dd2222104713cd222210471629222213bd13bd22221147101e222211362
2fd1226001c8018d1041fa8b2dd112611c6113600688018909a204e029d22260
294019403088028d747202a204e022632dd220330189fea105e022d222d33222
24d22ad33222047224d33222047228d33222047227d33222047227d3322227d7
27d320e2322701731042fb8f04771cd21cd33222147201e33222236310d23260
01c8018d1042fa8b0ed22260ff88048922600c6007880089181fa0a1090057af
e51f55afe51ff5500470051fe3600a882889f8ae00e902200c06018c3c06018c
80841e0000e100ac785634128c05018c186c5fa000e000ac0000008000e1000c
046c5fa000e0000c56657273220000800c010022000000020000006414e000ac
0000dec0047d73d1103d018919adc51f71d8836c057cf36a547a70db84600c69
ab80f3640b4b5f74036168e0982929022031028d160f19a103eeab840c61c890
9b201030028dc03812a103eee68b64d8836e147e63dd64dc64db65da0b4d0900
051f8669f36678769365f3640b4c747440e3fc333e52f361707110320189f9a0
04eef3617471a490fe0210320189f3a004ee3c52f5512a219a21b9213f533a22
a9222b211821028de038e7a004eed58b50d00b40f36b036a4fd9936e187e4fdd
6c7b4fdc96680b4d83640038028d02e0d6a005ee0a2868e0860fb365f3640b4c
68740038028d40e2cca006eefc322b51b031028de039c7a006eee38b41d11812
41d1191241d93dd80b48936440dbf3640b4b60743fd40b4807eef3640b4b6474
0b489364f3643cd10b41687440e7fc377a5278511032478fe51f36d11a17f365
6c75f3642ed00b406874f36432d10b41687440e1fc311a521951103208ee338f
e51f2ed00b4009ee01882d8fe51f2cd00b400aee0188278fe51f2ad483600b40
0bee20d428d00b40090028d110301b8fe51f27d424d00b4009000188148fe51f
24d140e0fc30181000e11a10f3656875f36421d10b41607440e3fc333a523851
10320cee028de51f42ae0900a36435a0836080001c31018cec30018c4800018c
d830018c6600018c5000018cf2830070f38300708400018cc030018c7200018c
7a00018c0000803f00000040010004008005018c010024008605018c8a00018c
9800018c01000c006805018c000080bf01000080785634127605018c0b400900
44d800e1122844d10b41090082627e9110320dee088fe51ff36440d00b406874
0788138f00eee51ff2ad0900f0ade51feeade51fecade51feaade51fe8ade51f
e6ade51fe4ade51fe2ade51f0eeedfade51f33d9926833d10b41090064e11229
31d120e22221136230d1226020c8018f1041fa8b2ed00b40090029d182212ad1
20e2222103619c7102e2263129011c31d8ad1f1f03a0081f01a0081f081f25d1
126425d125d22363136600e020e73365283540755026017600231047f78f0173
1cd31fd77223dc7300e772231dd7122704772227047710e66227199772232365
1075136000eee71f01e808a010e3d6af081fd4af081fd2af081f104324892466
6c6604677c677036f789f6af871f8001115409004440018c2c05018c4005018c
c8805fa00c06018c00695fa080841e003c06018c4000a0ff9040018c7040018c
018200001000a0ff6ed22062282203890192230209009e156bd2226210711032
228df75ee82e018f03eee71f67d268d112220171111267d100e3322131113211
33113411351164d732275fd32223136504731223047304e66223a89332271071
5bd004e813a004e35cd112615031d98ff75e5bd112611821d48ff75e56d11260
02c8d38fe82eceaf090010430789f75ee82efa8f56660036f789f6af871f4dd3
34533823048ff75e47d3326330322589e82e2a8d05ee00e247d1222124714221
48d149d33b2149d3222349d249d72227326320331b8d00e244d3222341d32223
45d222213263203301ee248fea1f126241d110321b8ff3611fa0787137d22262
1032d58ff75ed7af00e2d4afe71f726337d22033ffe22a622a1f00e233d32223
30d3222334d2222132632033df89fa5eeb6102711a1ff3617871399221213890
118158e012810fe0138133901481329015812ad100e220211871a0e2202128d2
28d1206008c8018f1041fa8b24d1106008c81a8d09eef362787223d306e12567
71231041fb8b21d10fe2222120d1139222210471f072222100e11ed30d940d95
0d961dd80c994aa000e2ecafe61f314420010002000383001f0fff0077772c01
a10f09008040018c1000a0ff6840018c0100feca5040018c1c00a0ff1400a0ff
1800a0ff4c40018c000000e0000014a50df0ad0b000014e52143341284705fa0
18705fa0a086010080705fa0002870a0402070a0000081a04b1714060a071360
783001400c37f5e00d4797071a0013670837c29eec3771230172027361714632
ec8f85315123017202736032f78f617100e162d21222047212220472ae933222
04721fe332220472a993322204721222047212220472122259d1a19222210471
60e2222157d100e09b9500e69a979a9355d25630d62f019d230df66d68136121
01707030f58f027100e150d212220472122204728693322204721fe332220472
7d933222047212220472122204721222047279933222047248e33222759244d3
22230473222304732223047322230473222340d21222047212223fd166922221
3ed600e763903ed46298629373620922236106e55d412c311c312c3145310a02
1365283501455c321942094287021a0228314f9eec31112601771043e68f0276
00e130d212220472122204723a93322204721fe3322204723193322204723a93
3222047212220472122227d128922221047160e22221d8712e922221f65007e1
1d401fcb40e2fc32061200eeeb1fec1fee1fffeeed1f00eee91f42a700e8028f
5a8878a0090001897ca0648817d114922221019023008360ea1130f800011f3c
1f0fff07001070170f0f00190242ff0fcf07011019fc00780342e003040070a0
240070a0000082a090e80000840070a0ac0070a0c00070a0800070a0000083a0
6b6f4606040170a0240170a01c985fa02dd10b4102e42dd12dd222212dd1ffe2
22212dd10b4109002cd110600fc90688018bb7a609002ad1126118211f8929d1
126118211b8f0820028d09e11ba701e240e3fc331e131f1323d1126004e700e6
00e5f3640b40787478e0fe011821028d01e21ed122211ed222610171122296a6
836011d10b4103e4c5af09000ed10b4104e4c0af090017d11392222101902300
8360001102890d9110382b8b12d113d22221836064882f8b11d1049222212ba0
0900e07fc8001f7ce405018c44815fa00000008014805fa08c05018c8c705fa0
1080018c0880018cbc00008c0080018c0c80018c10905fa0000070a001c20000
1c9c5fa0e791103803890190230083607c1073d173d2222173d174dc122c74d1
126340e2fc32331272dee2644412c265551201e2222120e1122e6fd1122c6fd1
6fd612266fd712276fd170d0122070d1141f131f00e9921f911f6ed2222f6edd
ba9700e66dd50b4d00e46ddbb41fb31f921f911f6bd1122f6bd700e667d50b4d
00e46ada922a6ad392236ad492246ad592256ad692266ad792276ad092206ad1
9221830affe369d2322210e1122e68d1122c68d152d4122452d5122552d753d6
7226b41fb31f921f911f52dee22f62d700e652d50b4d00e4922a55d0922055d1
922155d2922255d3922355d4922455d5922555d69226830affee54d7e22757d1
12611821018b28a101e255d1126177e22631028f017147a1090051d2122251d1
12600820018b49a1090009e11630018bf4a10a8801704bd102212dd14ce0fe04
4221047150e0fe055221147154e0fe066221087144d22221047144d2222144d1
11600d6043d111611f88028f1d61eca1090041d641d240e1236740e361271043
fc8f027729901041f68f0c322691163829023bd1088f222119d13ad222211e91
1038018b38d1106118d117d2222134d1126118210189daa1ffe718de33dcc41f
13d1131f32dbb21f32ddd11f11daa22f11d961a0ffe7a0000080000103010601
000070a0018200000000200060805fa048805fa04c805fa00000700100007f00
68805fa06c805fa00000008044815fa0000000430000003f4c0d018c00008020
000080429a99193fff0000ff000000e0040000e0080000e00c0000e0100000e0
140000e0180000e01c0000e014805fa00000740100003f0000ff00ff2480018c
2080018c1880018c00007f020000df01140a70a4c80a70a400f80000804070a4
2880018c0000c700010071a00000dc4200008c420000004200e6d7940b49e365
c41f6cd1131fb21f6bd1111fa22f6bd76bd5cb940b4900e6c41f6ad1131fb21f
69d1111fa22fffe768d6c0940b49e36567d1141f67d1131f67d1121fd11fa22f
ffe700e665d50b4900e465d1141f65d1131f65d1121f65d1111fa22fffe764d6
64d50b4908e464d164d2222164d265d332220472e222047200e33222047262d3
3222047232220472322204723222830100e053dd5ddc136359db5dda5dd95ed4
00e25ed53ba104e116380189e3ad0900a7a683605ad160ae09005ad122215ad2
222c5ad15ad22221b41fb31f921f911f50d1122f57d700e657d50b4d00e4922a
47d29222047292220472922204729222047292220472922204729222830a4fd1
ffe22221bbae09004dd111611d614dd00031f7894cd101e2b1ae22214bdaa26c
4bd1cb21122a4bd110e2222114714ad222214ad14ad21222047212223bd13cd2
22213dde47dbb41f47d1131f00e9921f911f30d1122f45dd2a9700e6e3650b4d
00e4b41fb31f921f911f41d1122f41d700e6e3650b4d00e41fd1922120d29222
047292220472922204729222047292220472922204729222830128d1ffe22221
c22a35d101e2222177ae090080008800008009000000304300001043ffffff80
0000908000009043000040430002003000005c420000c0420000f04100000020
00002f43000096430000fa4200007a4300000e0c24008020000000e020000080
040000e0000000c00000803f000043430c0000e00000003f100000e0180000e0
000020002480018c0000780144815fa000000080ff00ffff0000802014805fa0
280a78a41ff800001c80018cf4805fa0000001004c805fa000007c0100003f00
68805fa000008042000000434c0d018c9a99193fff0000ff1880018c948b2fd1
11600d60407111611f88078d1d612cd101e222212bd10be2ffad22214c922c31
29d33821f689f2af090045977c3126dee821068b22d112611821058923d609ae
090022d606ae0900379603ae090020d1141f20d1131f20d1121f20d1111f20d1
122f00e61fd520d10b4100e415ae090029071ceeed473b27722340e7fc377357
722b1ad76227922a22240c77222718dee22508772227830310412f8d017002c8
40e6fc36d3160089c31601c811d6df8d038811d6ddaf29072004e007200a7ca4
1c80018c1880018cdfff000000f800000000484300809f430000704200005243
6666663f000080204c0d018c080000e00000803f0000574300006b4385daa41f
85d1131f85d9921f85d1111f85dee22fffe785d685d586d00b4008e4a41f85d1
131f921f84d1111fe22fffe783d684d57fd10b4108e483da83d4422a83dd84d2
222d84db84d1122b84dc85d6622c00e984d3922384d5922584d7922784d09220
830ab22a83d1122d83d7722be22c92239225ffe2087322239220830ab22a122d
7ed3322be22cfc7592257dd1f87012200875222508709220830ab22a79d0022d
722be22cf8751225047592250475222504759225830a74d5522a022d322be22c
68d01220047012200470222004709220830a422a5ed4422d6cd4422b622c61d6
9226f870922061d492240c769226830ab22a67d6622d722be22cfc709220fc74
92240870222008749224830ab22a622d322be22c53d69226fc701220fc742224
0c769226830ab22a5ad6622d722be22c4cd712279220222408709220830a522a
622d322be22c122747d3122322249220830a51d2241f131f621f50d1111fe22f
ffe737d5559432de0b4e00e64cd1122a37d0022d32d1122b4ad1122c30d339d2
32222ed538d4522438d6922638d79227830a00e300e2c36b636affe9736421a0
04e5236740d141dc236641dddb2725dd722d26de022e27d0c2201ad7722b29dc
122c29d76227922a2224830d122d622e9220222b222c2227222a2224830d1045
6c8d017302e1336002c8028d392170a401c801c801892da403882ed01821d08f
13672adcd1af13662ad027d12adcccaf1366800000006b430000f04100005743
000020410000003f00c00034002080204c0d018c00005c4200000c4200c00036
00008020000000e008000080040000e0000000c0080000e0002480200c0000e0
00c80088100000e0140000e0180000e01c0000e00000f0420000e04100005042
0000004300002043080000f00004802000002443000040430000604300008042
c8000080000200300000803f00005643c80000e00000484300006c43d36a00e9
922de36d922e036c9220087e922e0870922092279cd292229cd39223830a9cd5
9cdbb11f9cd1122f9cde9dd753660b4e00e4b11f9bd1122f9bd79cd69cd50b4e
00e49cd1122a922d922c9bd4922402e29ad5222506e19ad612268bd722278bd0
1220830ab11f92d196d797d697d598d40b4e122f922a922d922c8fd292228fd3
92238fd4922480d5922580d69226830a90d7741f90d1131f90dee21f90d0011f
90dee22f90db91d691d592d40b4bffe788d1141f90d1131f88d2221f8fd1111f
e22f8fd68ad58bd40b4bffe7922a922d922c79d3922379d4922479d592256ad6
92266ad79227830a86d0041f7cd1131f85d2221f85d3311f85d4422f85d786d5
86d40b4b00e67fd5541f85d6631f7ed7721f84d0011f84d1122f84d77ed57fd4
0b4b00e6922a922d922c63d2922263d3922363d4922454d5922554d69226830a
7bd17cd222217cd1141f7cd1131f7cd1121f7cd1111f7cd1122f7cd700e67cd5
0b4b00e451d7741f7ad1131f6cd0021f79d1111fe22f79d779d582940b4b00e6
922a922d922c4cd192214cd292224cd392233dd492243dd59225830a71d6622f
71de72d772d673d573d40b4e09006dd7722f72d772d673d573d40b4e09003bde
e41f47d0031f56d1121f50d2211f50d3322f50d750d551d40b4b00e6e41f50d4
431f421f4fd5511f4fd6622f4fd74ad54ad40b4b00e6922a922d922c2ed79227
2ede922e2ed092201fd192211fd29222830a5ed1ffe2222134911038018910aa
09005bd25bd1226001c8018d1041fa8b59d15ad222215ad15ad2222104715ad2
2221047159d22221047134d22221047157d2222157d358d220e1222301721041
fb8f047355d156d22221147101e22221136248d1226001c8018d1041fa8be3a9
0900800096000900180000e01c0000e00000a0420000403f0000c8421c0c018c
0000704300006f43000074430000524300005c43000000200c0000e0100000e0
140000e00000004300004443000080420000020000005c42000068430000f041
000048430000003f4c0d018c00c40030000090200800000400008d4300007a43
00c6003000002a430000024300000c439a99193fff0000800000909400000002
000034430000f0429a99993e0000ff8060815fa0000000800000d84200008c42
0000be42000020423333333fffff00ff000080200000964300008043ffffff80
000090806666663ffc0c018c0000d442000082420000c2420000344200004d43
00009143000039430000874314805fa0186c5fa080841e0000e100ac78563412
00e000ac2200008000e1000c0c0100220000006514e000ac0001dec0046c5fa0
00e0000c63d222610171122283603c88028f4288a9a00900048ffb5ee82e018b
a8a009005cd10b4109005cd10b4110e45bd1126283639c73aa911633028ff951
c6a009002831fd5e163e008b1d1ffe5e123e00891e1ffc5e1c3eec1f291f00e1
48e0fe022822038d1821018922a10900028d3fe112a1fe521638018bc2a08360
017883603c88028f3ce12fa909001638018bb4a846881e88028f2d88e8a80900
028f0f881da9090001899fa183603dd10b4101e4836208422c3208428c321842
09428c326591192283603fc9036108410c31184134d33c3134d321211043fc8f
0271cea8090032d1222100e131d210220c720ae33022047210222fd1a0e22021
2ed22fd1206008c8018f1041fa8b2bd1106008c8238d13e26871212100e22121
0ae3312121212121212124d224d1206008c8018f1041fa8b20d1106008c81189
6871116211601162116211611ad220620fc918401c610b211ad257af12221ad1
faaf090018d1f7af090018d00b4000e404a00b1f15d00b4001e40b1f06d10b41
090006d10b4110e405d1126267af291f9500ff7f1080018c0c06018c4c06018c
0c00d8ffe405018c000000a500a000000880018c84705fa09c705fa018705fa0
a08601000480018cffff0000a007018caa9110381f8ff55ee82e1c8956d1a493
322156d1ec31291f55d2122255d112611821078d8360226253d11032038f01c8
c2a00ae201c8018be1a009004fd150d2122236af017887911038b78fce71fe53
fd5ee8331633268dfc5e4ad3ec337d911633268d44e0fe000820278df65e3ed1
75933221291ffc5e42d2ec326e9116325e8d44e0fe0008205d8ff65ee82e5d8f
48e0fe0008205c8fff5ee82e278df85039d1b9afec3130d15a93322137d1b3af
291f2dd155933221ddaf291fe82e0e8d58e029d1fe000221291ffe52fd5ee832
449116322dd19f8dfc5ecdaf0900291fd6ae01e120d13d922221efaffe520820
038df75e26d18faf0c31e82e028925d18aafec31fa5ee82e028923d184afec31
fb5ee82e038d40e020d17dafec3101e1fe021732038f40e01dd175af2c31fe00
0188028910d16faf09001ad16caf090019d169af090019d166af090018d163af
090018d160af0900fa00e003c8001f7c007cff03007e090010905fa00001d0ba
4840018c1080018c0d600d600000400050805fa043c721fe0008d0ba0200d0ba
0009d0ba000ad0ba000bd0ba000dd0ba0007d0ba4d4d0d600300d0ba0400d0ba
0500d0ba0600d0ba5bd11261c971263112895ad112611821138959d11262a991
1032028957d108a0090057d1126118210a8956d101a0090055d156d2122221af
836055d1f9af090054d1f6af090054d11daf090029071ce61821028d6d47d3ab
090050d050dc51d69fab090003c90388018959a93fe13fe11638028d83605aae
836201c8018b55a9090049d1019c230c090068ef47d222621071203102ee068f
e71f45d11261503102ee048de71f01922302090058ea01912301090096ea3360
038829071ce11d473cd038d136dc6cab1366f48f182139d091ab090041210170
02715630058f20c8d62f019d230df66d8eecf38f2364f1af336401a093628362
212101700271a630f78f0388f78d46302c8f66302c8b312101705888f38f0271
27d12892222127d227d1292127d33b2113662367e07726d518e352271043fc8f
047724d30ce77223fc7310e7722322d708e3722101771043fb8f047183061ed7
00e101e60195230508e37cdfc8af5362c6af7362280680000c80018c0880018c
0480018c030cd0ba0080018c040cd0ba010cd0ba4840018c020cd0ba9d5a0d60
000020000000484300006c430000803f000040001000a0ff1400a0ff00007043
1c815fa0e040018ce0ffff03000000e0111111113c0000ffe0ffc00040000000
6400000000000000400100000e00000000000000100000000a00000000000000
01000400000004000300040001000c0001002400010004000100000002000000
00010000000200000303000000017f80ff000000000000000100000002000000
ffffff7f0000008001000080ffffffff78563412efbeadde0000010053454741
20534547414b4154414e4120000000000000000017b7d1380000000000000000
ffffffff000020440000000017b7d1380000803f00000000ffffffff00000000
0000f04317b7d138000000000000803fffffffff
""")
# The program built with -DLIVE_SLANT (live_prog.c): a shaded triangle
# whose edges slant across the pixels over the middle of the picture, for
# the tests SSAA's resolve matters to (tools/vulkan/vk_hdr.sh --exact).
PROGRAM_SLANT = bytes.fromhex("""
01df02d02b40090000f0008c240e018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018cf47ff361319221214d6229444c602d9323673927
7b2011812c60128100e013815d6229455c6029233b2014812c6015810fd101e2
20211871a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f362
09d706e1256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa0
18705fa0a086010080705fa027d100e220210c71602163621942047120210871
a0e2202122d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed34562
21231041fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d
536400e014d70174180063610a3101416362017202e33232078d017105a001e1
194224041041098d027071622d62036301736233f48f2405f5af104107d11061
0b0001e00b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0
862f962fa62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba0
09e0fc840fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288
608f01e0f3620c7225840c63284326840c6118613b2127840c600b21b9931c33
b8922633018b9ea001e08828488d83605cd222621032018b97a002e00ee6f365
59d457d00b400c750820018b8fa009e0f3600c700184118801898aa003e0f360
0c7004840188018985a003e0f3600c7005840288018980a003e0f3620c722b84
0c6328432c840c6118613b212d840c622b217e922c317d922631018b6fa003e0
64e6f36541d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce9
38d2122248a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af
6f801049088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca0
0ae01c311042068dff736821f9891c314a21f7af1d611040068954622c621842
2a217363f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c62
136319433032228ff3622b840c621c611032ffe00a600840707f264ff66bf66a
f6690b00f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf
0900e9af09e0e7af04e0e5af04e0e3af04e0a8fd2b018000211009008031018c
ec06018c1480018c7431018c6831018c00800000ffff00000ad1422104715221
01e109d21222087212220472122207d1226001c8018d1041fa8b05d1126001c8
0b00290004745fa00c745fa000093d0018745fa0626113671947014725922821
ffe22a62436300432903136001402444136019407a2001c8108943605c302a23
063429073a2773611841236318433c333b21203729022b210b00122643605830
2a2346302907eeaf3a27000249d1126249d11032048d00e248d122210b0000e0
47d148d2122248d221521032718b47d112600188028d11e00b00090044d345d1
3111047144d2292144d645d772166c921b222316726230325d8f00e341d23222
736301e77223226360922033558b39d2215337d22033df8f13e03bd23bd33112
3bd334d733173bd773123bd226164e921b22271639d222623032cd8f16e038d2
2dd3392243932b23371624d305e7722332d332672fd33037318b32d32fd73227
29d7735730372c8b22d3335728d33037b28f18e02cd778162a977b2119162bd1
01e332212ad1126321d11033a48f19e025d338167b22291624d102e2222124d1
126220d110320e8f00e220d122210b0001e00b0011e00b0012e00b0013e00b00
17e00b0018e00b001ae01601c0003601340109000000001044332211100000ff
88776655040000100050018c4040018c5555aaaafc5f018c00f0ff1f0040018c
001000104440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c00030001008300010
0070018cc1c1c1c100400010000000ff08400010862f962ff45110d2222210d8
422810d0522010d4122410d5622510d6722610d7122710d3f25992238302f359
9222122800e11220122412251226122712238302f6690b00f6680900000000e0
040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0862f962f
a62fb62fc62fd62fe62f224ff07f536b636a7369fd5e2ad11b24431f29dd422d
00e829d1822129d282220871822108728222087182210872822208718221830d
e21f611f722f22dcfc575366a3650b4cb364e21ffc52211f922f2367b366a365
0b4c93641bdee21fa11f922ffc57b366a3650b4cb364f351122d17d112d21222
12d182210872822208718221087282220871822108728222830de21ffc51111f
922f1367b366a3650b4c9364107f264ff66ef66df66cf66bf66af6690b00f668
00000081000000e0040000e0080000e0b40b018c0000803e00000024224ff87f
f351111f722f6367536643650cd10b4100e40cd200e112220bd3122304731223
04731223047312230473122304731223047312238302087f264f0b0009000900
1c0c018c000000e0040000e0862f962fa62fb62fc62fd62fe62ff75cf85bf95e
24d14b2124d2122224da25d1122a25d9522925d8622825d000e1122024d51225
24d6122624d312238302436d2b2dd222b22ae229c22812201225722612238302
d222b22afb5bb229c22812201bdbb225722612238302d222fa5dd22ae229c228
b220122572261223830215dddb244222fa54422afb5dd229c228b220b2257226
12238302f66ef66df66cf66bf66af6690b00f66800000080000000e0040000e0
000000c0080000e00c0000e0100000e0140000e0180000e01c0000e00000803f
000000f0862f962fa62fb62fc62fd62fe62f224fbc7fc07f9bd112619bd22665
266622679ad2266322625b216b217b213b212b2144e0160f96d11060fec90021
ffe295d322230473222300e204732123106001cb002191d1126091d3392005cb
022118718fd33221f471222110718ed222216c718dd222219c718dd222210471
8cd2222110718cd222218cd18cd212228cd212228cd18dd222218dd600e38dd8
8dd412e745330a02094223611c3113652c355c353369583953609c3008408e01
122601731047ed8f047684d184d2222184d185d22221047184d22221047184d2
222184d1c59222210471c392222104711fe222210471be9222217fd27fd310e1
32221041fc8f04727dd1b59222213c717cd222210871077222217bd27bd3ac91
32221041fc8f047279d17ad77ad310e27221a3961c3632261042f98f047177d1
77d2222104719a92222176d276d310e132221041fc8f04721fe174d2122274d2
122274d100e002ea00e973d807e41fe58697869317e6d62f019d230df66df420
1043058d017726657035f989f8af63616ad227536ad22033648d48e001e1160f
10e168d212220472122267d267d30ce132221041fc8f047200e163d212220472
122263d163d2222163d164d2222164d12e4164d1ffe700e308e2722131111042
fb8f08715fd360d1122360d260d1292148977b2111135fd1122200e111125ed2
12225ed212225ed105e222215dd00b40090040e7fc3700175bd1eee233932021
5ad71c3720275ad71c37202759d71c3720271043f38f017157d458d00b4005e5
082001ee028de61fb4a0090054d00b40090054d454d10b41092454dcc36dc51f
bda200ee52d2205335d22033978996af01e1007ce003ff7f8001800000101f7c
e00700f836010048846c5fa0f46c5fa0c0785fa00400d8ff0800d8ff44805fa0
000080003f7d1700000020000401150000007f020000df0177df270000001000
20805fa028815fa08c805fa0000000030c0010a5f831018cabaaaaaa88805fa0
17b7d138000010a500000002000080200000003004905fa0001000a403030303
74805fa000ff000000825fa080800000002006a4050505050606060614905fa0
1ffc0000000006a4070707071c985fa01c9c5fa0004006a4ffff0000c040018c
11111111380000ff000018a500000080180018a54c0e00a02c805fa000001800
a800018c0040018c000000100050018c00f0ff1f443322114040018c000000ff
100000ff2c0a018c000023ac0000ffff0000feff0000fdff5eb000006c06018c
6600018cff7fffff6c00018cc031018c0041018cbd9562d462d00b4009000820
028fe61f42af09005fd460d00b4005e50820018ba3a002ee5dd8ab9b59da5dd9
b3650b4a83640820018b9aa002eea1900c389038f58fb36553d454d00b4008e5
0820018b8fa003ee959553d44dd00b4009000820028f10e187a003ee4fd650d2
20677c6764633c633037028d10417ea004eef58f01724bd17b9210677c674ad3
1c3330633c633037028d1042a8a005eef38f017145d16c9210677c6744d31c33
30633c633037028d10429ba006eef38f017135d435d00b4002e50820018b93a0
08ee3cd13cd2222104715592222101e13ad21222087212220472122238d12260
01c8018d1041fa8b36d1126001c8028ffc717ba009ee00e222210471126001c8
018975a00aee30d1379202a009000c8d017110677c672dd31c3330633c633037
f58d10420beeb1aee61f29d110611c61249220315e8f0cee26d110611c612031
5a8f07ee24d110611c612031568b23d110611c612031538b00ee97aee61f95ae
e61f93aee61f91aee61f8faee61f8daee61f00280004004000180010ee000900
0000200c9809018c5eb000006c06018c0000210c0028210c0000220ce831018c
000020ac000021ac0000ffff000022ac0000feff04745fa00000230c0c745fa0
801a060018745fa0000023ac0000fdff001023ac002820ac002821ac004022ac
54aee61f52aee61f50aee61f4eaee61f4caee61f4aaee61f48aee61f46aee61f
44aee61f017993600888038f936800a1017e936807e00d4846911928936001c9
0b2870e0860fd26af553326bf3667076b3651ed70b47a364071ff36778778366
b3651bd00b40a36440e2fc322e51f7501030318f70e02f5127922921fe022031
028de82ed1a001eecc8ff366860f7076a3650ed70b47a364036bf36678768365
0cd00b40a36440e2fc322e51103b0189bda002ee2f51089339212c522031b28d
017902ee0aa0e51f00030103d409018c1000018c2c00018c01eee51f59d10b41
00e859d00b400900036158d956db0b4b136aa230058f0361a030ffe22a381049
f58b63e1163801ee028fef1f07a209004fd850d1122850d10b41090082624fd3
4ad1326001c8018d1041fa8b4bd11261136001c9081f136001c8018910a202e0
43d1126343d11033018b0ba203e040d1126040d11032038dff88018904a201e0
3bd11260ff885e893ad222213cd13dd2222104713cd222210471629222213bd1
3bd22221147101e2222113622fd1226001c8018d1041fa8b2dd112611c611360
0688018909a204e029d22260294019403088028d747202a204e022632dd22033
0189fea105e022d222d3322224d22ad33222047224d33222047228d332220472
27d33222047227d3322227d727d320e2322701731042fb8f04771cd21cd33222
147201e33222236310d2326001c8018d1042fa8b0ed22260ff88048922600c60
07880089181fa0a1090057afe51f55afe51ff5500470051fe3600a882889f8ae
00e902200c06018c3c06018c80841e0000e100ac785634128c05018c186c5fa0
00e000ac0000008000e1000c046c5fa000e0000c56657273220000800c010022
000000020000006414e000ac0000dec0047d73d1103d018912adc51f71d8836c
057cf36a547a70db84600c69ab80f3640b4b5f74036168e0982929022031028d
160f19a103eeab840c61c8909b201030028dc03812a103eee68b64d8836e147e
63dd64dc64db65da0b4d0900051f8669f36678769365f3640b4c747440e3fc33
3e52f361707110320189f9a004eef3617471a490fe0210320189f3a004ee3c52
f5512a219a21b9213f533a22a9222b211821028de038e7a004eed58b50d00b40
f36b036a4fd9936e187e4fdd6c7b4fdc96680b4d83640038028d02e0d6a005ee
0a2868e0860fb365f3640b4c68740038028d40e2cca006eefc322b51b031028d
903ec7a006eee38b41d1181241d1191241d93dd80b48936440dbf3640b4b6074
3fd40b4807eef3640b4b64740b489364f3643cd10b41687440e7fc377a527851
1032478fe51f36d11a17f3656c75f3642ed00b406874f36432d10b41687440e1
fc311a521951103208ee338fe51f2ed00b4009ee01882d8fe51f2cd00b400aee
0188278fe51f2ad483600b400bee20d428d00b40090028d110301b8fe51f27d4
24d00b4009000188148fe51f24d140e0fc30181000e11a10f3656875f36421d1
0b41607440e3fc333a52385110320cee028de51f42ae0900a36435a083608000
e831018cb831018c4800018ca431018c6600018c5000018cf2830070f3830070
8400018c8c31018c7200018c7a00018c0000803f00000040010004008005018c
010024008605018c8a00018c9800018c01000c006805018c000080bf01000080
785634127605018c0b40090044d800e1122844d10b41090082627e9110320dee
088fe51ff36440d00b4068740788138f00eee51ff2ad0900f0ade51feeade51f
ecade51feaade51fe8ade51fe6ade51fe4ade51fe2ade51f0eeedfade51f33d9
926833d10b41090064e1122931d120e22221136230d1226020c8018f1041fa8b
2ed00b40090029d182212ad120e2222103619c7102e2263129011c31d8ad1f1f
03a0081f01a0081f081f25d1126425d125d22363136600e020e7336528354075
5026017600231047f78f01731cd31fd77223dc7300e772231dd7122704772227
047710e662271997722323651075136000eee71f01e808a010e3d6af081fd4af
081fd2af081f1043248924666c6604677c677036f789f6af871f800111540900
4440018c2c05018c4005018cc8805fa00c06018c00695fa080841e003c06018c
4000a0ff9040018c7040018c018200001000a0ff6ed220622822038901922302
09003e166bd2226210711032228df75ee82e018f03eee71f67d268d112220171
111267d100e332213111321133113411351164d732275fd32223136504731223
047304e66223a893322710715bd004e813a004e35cd112615031d98ff75e5bd1
12611821d48ff75e56d1126002c8d38fe82eceaf090010430789f75ee82efa8f
56660036f789f6af871f4dd334533823048ff75e47d3326330322589e82e2a8d
05ee00e247d122212471422148d149d33b2149d3222349d249d7222732632033
1b8d00e244d3222341d3222345d222213263203301ee248fea1f126241d11032
1b8ff3611fa0787137d222621032d58ff75ed7af00e2d4afe71f726337d22033
ffe22a622a1f00e233d3222330d3222334d2222132632033df89fa5eeb610271
1a1ff3617871399221213890118158e012810fe0138133901481329015812ad1
00e220211871a0e2202128d228d1206008c8018f1041fa8b24d1106008c81a8d
09eef362787223d306e1256771231041fb8b21d10fe2222120d1139222210471
f072222100e11ed30d940d950d961dd80c994aa000e2ecafe61f314420010002
000383001f0fff0077772c01a10f09008040018c1000a0ff6840018c0100feca
5040018c1c00a0ff1400a0ff1800a0ff4c40018c000000e0000014a50df0ad0b
000014e52143341284705fa018705fa0a086010080705fa0002870a0402070a0
000081a04b1714060a071360783001400c37f5e00d4797071a0013670837d59e
ec3771230172027361714632ec8f85315123017202736032f78f617100e16cd2
1222047212220472c193322204721fe332220472bc9332220472122204721222
0472122263d1b4922221047160e2222161d100e0ae9500e6ad97ad935fd25630
d62f019d230df66d0814612101707030f58f027100e15ad21222047212220472
9993322204721fe3322204729093322204721222047212220472122204728c93
3222047248e3322288924ed32223047322230473222304732223047322234ad2
12220472122249d17992222148d600e7769048d47598759373620922236106e5
5d412c311c312c3145310a021365283501455c321942094287021a022831629e
ec31112601771043e68f027600e13ad212220472122204724d93322204721fe3
322204724493322204724d933222047212220472122231d13b922221047160e2
2221d87141922221f65007e11d401fcb40e2fc32061200eeeb1fee1fed1fffee
ec1f00eee91f92a700e8188d5a884d8f648823d12a9222210190230083609012
20d10b4102e4ffa109001ed10b4103e4faa109001bd10b4104e4f5a109001ad1
15922221019023008360641230f800011f3c1f0fff07001070170f0f00190242
ff0fcf07011019fc00780342e003e07f040070a0240070a0000082a090e80000
840070a0ac0070a0c00070a0800070a0000083a06b6f4606040170a0240170a0
1c985fa0e405018c10905fa002890c911038138b06d107d2222183606488178b
05d10392222113a00900c8001f7c0900000070a001c200001c9c5fa0e7911038
0389019023008360b01173d173d2222173d174dc122c74d1126340e2fc323312
72dee2644412c265551201e2222120e1122e6fd1122c6fd16fd612266fd71227
6fd170d0122070d1141f131f00e9921f911f6ed2222f6eddba9700e66dd50b4d
00e46ddbb41fb31f921f911f6bd1122f6bd700e667d50b4d00e46ada922a6ad3
92236ad492246ad592256ad692266ad792276ad092206ad19221830affe369d2
322210e1122e68d1122c68d152d4122452d5122552d753d67226b41fb31f921f
911f52dee22f62d700e652d50b4d00e4922a55d0922055d1922155d2922255d3
922355d4922455d5922555d69226830affee54d7e22757d112611821018b5ca1
01e255d1126177e22631028f01717ba1090051d2122251d112600820018bd9a1
090009e11630018b1ca20a8801704bd102212dd14ce0fe044221047150e0fe05
5221147154e0fe066221087144d22221047144d2222144d111600d6043d11161
1f88028f1d6114a2090041d641d240e1236740e361271043fc8f027729901041
f68f0c322691163829023bd1088f222119d13ad222211e911038018b38d11061
18d117d2222134d112611821018902a2ffe718de33dcc41f13d1131f32dbb21f
32ddd11f11daa22f11d961a0ffe7a0000080000103010601000070a001820000
0000200060805fa048805fa04c805fa00000700100007f0068805fa06c805fa0
0000008044815fa0000000430000003f4c0d018c00008020000080429a99193f
ff0000ff000000e0040000e0080000e00c0000e0100000e0140000e0180000e0
1c0000e014805fa00000740100003f0000ff00ff2480018c2080018c1880018c
00007f020000df01140a70a4c80a70a400f80000804070a42880018c0000c700
010071a00000dc4200008c420000004200e6c3940b49e365c41f61d1131fb21f
60d1111fa22f60d760d5b7940b4900e6c41f5fd1131fb21f5ed1111fa22fffe7
5dd6ac940b49e3655cd1141f5cd1131f5cd1121fd11fa22fffe700e65ad50b49
00e45ad1141f5ad1131f5ad1121f5ad1111fa22fffe759d659d50b4908e459d1
59d2222159d25ad332220472e222047200e33222047257d33222047232220472
322204723222830100e048dd52dc13634edb52da52d953d400e253d563a104e1
1638018b43a7836050d151d2222151d1ffe2222150d10b41090050d110600fc9
0688018b34a509004dd1126118211f894cd1126118211b8f0820028d09e198a5
01e240e4fc341e141f1447d1126004e700e600e5f3640b40787478e0fe011821
028d01e241d1222141d222610171122213a583603fd12cae09003fd122213fd2
222c32d132d22221b41fb31f921f911f2bd1122f3ad700e63ad50b4d00e4922a
22d29222047292220472922204729222047292220472922204729222830a25d1
ffe2222187ae09002fd111611d612fd00031f7892ed101e27dae222180008800
0000304300001043ffffff800000908000009043000040430002003000005c42
0000c0420000f0410000002000002f43000096430000fa4200007a4300000e0c
24008020000000e020000080040000e0000000c00000803f000043430c0000e0
0000003f100000e0180000e044815fa00000008014805fa08c05018c8c705fa0
1080018c0880018cbc00008c0080018c0c80018c000020002480018c00007801
ff00ffff00008020280a78a41ff800001c80018c54daa26c54d1cb21122a54d1
10e22221147153d2222153d153d212220472122252d153d2222153de53dbb41f
53d1131f00e9921f911f52d1122f52dd869700e6e3650b4d00e4b41fb31f921f
911f4ed1122f4ed700e6e3650b4d00e44cd192214cd292220472922204729222
04729222047292220472922204729222830146d1ffe22221c22a45d101e22221
e7ad0900fc8b43d111600d60407111611f88078d1d6140d101e222213cd10be2
d7ad22214d922c313cd33821f689f2af090046977c3139dee821068b36d11261
1821058936d6e1ad090035d6dead09003896dbad090033d1141f33d1131f33d1
121f33d1111f33d1122f00e61ed522d10b4100e4edad090029071ceeed473b27
722340e7fc377357722b2bd76227922a22240c77222729dee225087722278303
1041518d017002c840e6fc36d3160089c31601c822d6df8d038822d6ddaf2907
00802004e0070900f4805fa0000001004c805fa000007c0100003f0068805fa0
44815fa0000000800000802000008042000000430000003f4c0d018c9a99193f
ff0000ff000000e0040000e014805fa01880018c200a7ca41c80018cdfff0000
00f800000000484300809f4300007042000052436666663f080000e00000803f
0000574300006b4385daa41f85d1131f85d9921f85d1111f85dee22fffe785d6
85d586d00b4008e4a41f85d1131f921f84d1111fe22fffe783d684d57fd10b41
08e483da83d4422a83dd84d2222d84db84d1122b84dc85d6622c00e984d39223
84d5922584d7922784d09220830ab22a83d1122d83d7722be22c92239225ffe2
087322239220830ab22a122d7ed3322be22cfc7592257dd1f870122008752225
08709220830ab22a79d0022d722be22cf8751225047592250475222504759225
830a74d5522a022d322be22c68d01220047012200470222004709220830a422a
5ed4422d6cd4422b622c61d69226f870922061d492240c769226830ab22a67d6
622d722be22cfc709220fc7492240870222008749224830ab22a622d322be22c
53d69226fc701220fc7422240c769226830ab22a5ad6622d722be22c4cd71227
9220222408709220830a522a622d322be22c122747d3122322249220830a51d2
241f131f621f50d1111fe22fffe737d5559432de0b4e00e64cd1122a37d0022d
32d1122b4ad1122c30d339d232222ed538d4522438d6922638d79227830a00e3
00e2c36b636affe9736421a004e5236740d141dc236641dddb2725dd722d26de
022e27d0c2201ad7722b29dc122c29d76227922a2224830d122d622e9220222b
222c2227222a2224830d10456c8d017302e1336002c8028d3921c0a401c801c8
01897da403882ed01821d08f13672adcd1af13662ad027d12adcccaf13668000
00006b430000f04100005743000020410000003f00c00034002080204c0d018c
00005c4200000c4200c0003600008020000000e008000080040000e0000000c0
080000e0002480200c0000e000c80088100000e0140000e0180000e01c0000e0
0000f0420000e041000050420000004300002043080000f00004802000002443
000040430000604300008042c8000080000200300000803f00005643c80000e0
0000484300006c43d36abdd1122de36dbcd1122e036cbcdee220bcdb00e9922b
087092209227bad29222bade922e830aa22ab9d1122db9d1122cb9d1122b9220
9227b8d2b2d42224922e830aa22ab6d2222db6d2222c122b92209227b4d22224
922e830ab3d2222ab3d2222db3d2222c122b92209227b2d11224922e830a922a
922d922c922b922092279224922e830aacd5add6611fadd1122fadd75366add0
0b4000e4a8d1111fabd1122fabd7acd6acd5a8d20b4200e4abd1122a922d922c
922b02e2a9d3222306e1a9d4122490d52225122e830a9cd6611fa2d7722fa5d7
a5d6a6d5a6d49bd00b400900922a922d922c922b9dd192219dd2922284d39223
922e830a9fd4441f9fd1131f9fd5521f9fd6611f9fd7722f9fd6a0d5a0d4a1d0
0b40ffe797d1141f9fd1131f97d2221f9ed1111f97d3322f9dd698d598d499d0
0b40ffe7922a922d922c922b87d1922187d292226ed39223922e830a95d4441f
8bd5531f94d6621f94d7711f94d0022f94d795d595d48bd10b4100e68dd2241f
93d3331f8cd4421f92d5511f92d6622f92d78dd58dd483d00b4000e6922a922d
922c922b71d1922171d2922258d39223922e830a8ad18bd222218bd1141f8bd1
131f8bd1121f8bd1111f8bd1122f8bd700e64dd573d00b4000e461d1141f88d1
131f7bd2221f87d1111f6ad3322f86d786d582946bd00b4000e6922a922d922c
922b5ad192215ad2922241d39223922e830a7fd4422f7fd77fd680d580d481d0
0b4009007ad180d780d681d581d47dd20b42122f4ad3341f55d4431f64d5521f
5ed6611f5ed7722f5ed75fd55fd455d00b4000e642d1141f5dd2231f221f5dd3
311f5dd4422f5dd757d558d44dd00b4000e6922a922d922c922b3cd192213cd2
922223d39223922e830a6bd1ffe22221349110380189adab090068d268d12260
01c8018d1041fa8b66d167d2222167d167d22221047167d22221047166d22221
047142d22221047164d2222164d365d220e1222301721041fb8f047362d163d2
2221147101e22221136255d1226001c8018d1041fa8b80ab0900800096000900
02000080000000c0000080200c0000e0180000e01c0000e0333321426666e742
1f856b3f1010e0ff9a19164366e64d4310e010ff000000f0cd4c914333330243
e01010ff0000a0420000403f0000c842000070431c0c018c00006f4300007443
0000524300005c4300000020100000e0140000e0000000430000444300008042
0000020000005c42000068430000f041000048430000003f00c4003000009020
080000044c0d018c00008d4300007a4300c6003000002a430000024300000c43
9a99193fff0000800000909400000002000034430000f0429a99993e0000ff80
60815fa0000000800000d84200008c420000be42000020423333333fffff00ff
0000964300008043ffffff80000090806666663f0000d442000082420000c242
00003442fc0c018c00004d4300009143000039430000874314805fa0186c5fa0
80841e0000e100ac7856341200e000ac2200008000e1000c0c01002200000065
14e000ac0001dec0046c5fa000e0000c63d222610171122283603c88028f4288
a9a00900048ffb5ee82e018ba8a009005cd10b4109005cd10b4110e45bd11262
83639c73aa911633028ff951c6a009002831fc5e163e008b1c1ffd5e123e0089
1d1ffe5e1c3eee1f291f00e148e0fe022822038d1821018922a10900028d3fe1
12a1fd521638018bc2a08360017883603c88028f3ce17da809001638018b64a8
46881e88028f2d886aa80900028f0f886ba8090001899fa183603dd10b4101e4
836208422c3208428c32184209428c326591192283603fc9036108410c311841
34d33c3134d321211043fc8f027151aa090032d1222100e131d210220c720ae3
3022047210222fd1a0e220212ed22fd1206008c8018f1041fa8b2bd1106008c8
238d13e26871212100e221210ae3312121212121212124d224d1206008c8018f
1041fa8b20d1106008c811896871116211601162116211611ad220620fc91840
1c610b211ad257af12221ad1faaf090018d1f7af090018d00b4000e404a00b1f
15d00b4001e40b1f06d10b41090006d10b4110e405d1126267af291f9500ff7f
1080018c0c06018c4c06018c0c00d8ffe405018c000000a500a000000880018c
84705fa09c705fa018705fa0a08601000480018cffff0000a007018caa911038
1f8ff55ee82e1c8956d1a493322156d1ec31291f55d2122255d112611821078d
8360226253d11032038f01c8c2a00ae201c8018be1a009004fd150d2122236af
017887911038b78fce71fd53fc5ee8331633268dfe5e4ad3ec337d911633268d
44e0fe000820278df65e3ed175933221291ffe5e42d2ec326e9116325e8d44e0
fe0008205d8ff65ee82e5d8f48e0fe0008205c8fff5ee82e278df85039d1b9af
ec3130d15a93322137d1b3af291f2dd155933221ddaf291fe82e0e8d58e029d1
fe000221291ffd52fc5ee832449116322dd19f8dfe5ecdaf0900291fd6ae01e1
20d13d922221efaffd520820038df75e26d18faf0c31e82e028925d18aafec31
fa5ee82e028923d184afec31fb5ee82e038d40e020d17dafec3101e1fe021732
038f40e01dd175af2c31fe000188028910d16faf09001ad16caf090019d169af
090019d166af090018d163af090018d160af0900fa00e003c8001f7c007cff03
007e090010905fa00001d0ba4840018c1080018c0d600d600000400050805fa0
43c721fe0008d0ba0200d0ba0009d0ba000ad0ba000bd0ba000dd0ba0007d0ba
4d4d0d600300d0ba0400d0ba0500d0ba0600d0ba5bd11261c971263112895ad1
12611821138959d11262a9911032028957d108a0090057d1126118210a8956d1
01a0090055d156d2122221af836055d1f9af090054d1f6af090054d11daf0900
29071ce61821028d6d4783ab090050d050dc51d64fab090003c903880189bfa8
3fe13fe11638028d83605aae836201c8018befa8090049d1019c230c090034ee
47d222621071203102ee068fe71f45d11261503102ee048de71f019223020900
b8e9019123010900f6e93360038829071ce11d473cd038d136dc1cab1366f48f
182139d041ab09004121017002715630058f20c8d62f019d230df66deeebf38f
2364f1af336401a093628362212101700271a630f78f0388f78d46302c8f6630
2c8b312101705888f38f027127d12892222127d227d1292127d33b2113662367
e07726d518e352271043fc8f047724d30ce77223fc7310e7722322d708e37221
01771043fb8f047183061ed700e101e60195230508e3b0dec8af5362c6af7362
280680000c80018c0880018c0480018c030cd0ba0080018c040cd0ba010cd0ba
4840018c020cd0ba9d5a0d60000020000000484300006c430000803f00004000
1000a0ff1400a0ff000070431c815fa0e040018ce0ffff03000000e011111111
3c0000ffe0ffc000400000006400000000000000400100000e00000000000000
100000000a0000000000000001000400000004000300040001000c0001002400
01000400010000000200000000010000000200000303000000017f80ff000000
000000000100000002000000ffffff7f0000008001000080ffffffff78563412
efbeadde000001005345474120534547414b4154414e41200000000000000000
17b7d1380000000000000000ffffffff000020440000000017b7d1380000803f
00000000ffffffff000000000000f04317b7d138000000000000803fffffffff
""")
# The program built with -DLIVE_SLANT -DLIVE_HSCALE (live_prog.c): the
# slanted triangle, and the screen's renders through the X scaler, each
# pixel written the average of a pair drawn (tools/vulkan/vk_hdr.sh --exact).
PROGRAM_HSCALE = bytes.fromhex("""
01df02d02b40090000f0008c240e018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018cf47ff361319221214d6229444c602d9323673927
7b2011812c60128100e013815d6229455c6029233b2014812c6015810fd101e2
20211871a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f362
09d706e1256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa0
18705fa0a086010080705fa027d100e220210c71602163621942047120210871
a0e2202122d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed34562
21231041fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d
536400e014d70174180063610a3101416362017202e33232078d017105a001e1
194224041041098d027071622d62036301736233f48f2405f5af104107d11061
0b0001e00b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0
862f962fa62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba0
09e0fc840fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288
608f01e0f3620c7225840c63284326840c6118613b2127840c600b21b9931c33
b8922633018b9ea001e08828488d83605cd222621032018b97a002e00ee6f365
59d457d00b400c750820018b8fa009e0f3600c700184118801898aa003e0f360
0c7004840188018985a003e0f3600c7005840288018980a003e0f3620c722b84
0c6328432c840c6118613b212d840c622b217e922c317d922631018b6fa003e0
64e6f36541d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce9
38d2122248a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af
6f801049088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca0
0ae01c311042068dff736821f9891c314a21f7af1d611040068954622c621842
2a217363f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c62
136319433032228ff3622b840c621c611032ffe00a600840707f264ff66bf66a
f6690b00f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf
0900e9af09e0e7af04e0e5af04e0e3af04e0a8fd2b01800021100900ac31018c
ec06018c1480018ca031018c9431018c00800000ffff00000ad1422104715221
01e109d21222087212220472122207d1226001c8018d1041fa8b05d1126001c8
0b00290004745fa00c745fa000093d0018745fa0626113671947014725922821
ffe22a62436300432903136001402444136019407a2001c8108943605c302a23
063429073a2773611841236318433c333b21203729022b210b00122643605830
2a2346302907eeaf3a27000249d1126249d11032048d00e248d122210b0000e0
47d148d2122248d221521032718b47d112600188028d11e00b00090044d345d1
3111047144d2292144d645d772166c921b222316726230325d8f00e341d23222
736301e77223226360922033558b39d2215337d22033df8f13e03bd23bd33112
3bd334d733173bd773123bd226164e921b22271639d222623032cd8f16e038d2
2dd3392243932b23371624d305e7722332d332672fd33037318b32d32fd73227
29d7735730372c8b22d3335728d33037b28f18e02cd778162a977b2119162bd1
01e332212ad1126321d11033a48f19e025d338167b22291624d102e2222124d1
126220d110320e8f00e220d122210b0001e00b0011e00b0012e00b0013e00b00
17e00b0018e00b001ae01601c0003601340109000000001044332211100000ff
88776655040000100050018c4040018c5555aaaafc5f018c00f0ff1f0040018c
001000104440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c00030001008300010
0070018cc1c1c1c100400010000000ff08400010862f962ff45110d2222210d8
422810d0522010d4122410d5622510d6722610d7122710d3f25992238302f359
9222122800e11220122412251226122712238302f6690b00f6680900000000e0
040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0862f962f
a62fb62fc62fd62fe62f224ff07f536b636a7369fd5e2ad11b24431f29dd422d
00e829d1822129d282220871822108728222087182210872822208718221830d
e21f611f722f22dcfc575366a3650b4cb364e21ffc52211f922f2367b366a365
0b4c93641bdee21fa11f922ffc57b366a3650b4cb364f351122d17d112d21222
12d182210872822208718221087282220871822108728222830de21ffc51111f
922f1367b366a3650b4c9364107f264ff66ef66df66cf66bf66af6690b00f668
00000081000000e0040000e0080000e0b40b018c0000803e00000024224ff87f
f351111f722f6367536643650cd10b4100e40cd200e112220bd3122304731223
04731223047312230473122304731223047312238302087f264f0b0009000900
1c0c018c000000e0040000e0862f962fa62fb62fc62fd62fe62ff75cf85bf95e
24d14b2124d2122224da25d1122a25d9522925d8622825d000e1122024d51225
24d6122624d312238302436d2b2dd222b22ae229c22812201225722612238302
d222b22afb5bb229c22812201bdbb225722612238302d222fa5dd22ae229c228
b220122572261223830215dddb244222fa54422afb5dd229c228b220b2257226
12238302f66ef66df66cf66bf66af6690b00f66800000080000000e0040000e0
000000c0080000e00c0000e0100000e0140000e0180000e01c0000e00000803f
000000f0862f962fa62fb62fc62fd62fe62f224fbc7fc07f6bd112616bd22665
266622676ad2266322625b216b217b213b212b2144e0160f66d11060fec90021
ffe265d322230473222300e204732123106001cb002161d1126061d7792005cb
022160d360d6622360d6222660d261d662226c7260d662229c7260d662220472
5fd662225fd662625fd55b2222265fd206e6622204728c966222126079200dcb
02215bd112235bd15bd222215bd15cd212225cd212225cd15cd222215cd600e3
5cd85dd412e745330a02094223611c3113652c355c353369583953609c300840
8e01122601731047ed8f047653d154d2222154d154d22221047154d222210471
53d2222153d15592222104715392222104711fe2222104714e9222214ed24fd3
10e132221041fc8f04724dd1459222213c714cd222210871077222214ad24bd3
3c9132221041fc8f047249d149d74ad310e2722133961c3632261042f98f0471
46d147d2222104712a92222145d246d310e132221041fc8f04721fe143d21222
43d2122243d100e002ea00e942d807e41fe51697169317e6d62f019d230df66d
fe2010437a8d017726657035f989f8af63614001007ce003ff7f800180000010
1f7ce00700f80900846c5fa0f46c5fa0c0785fa00400d8ff0800d8ff44805fa0
000080005c805fa03f7d170050805fa060805fa0000020000401150000007f02
0000df01f4805fa00000010048805fa07f7e17007c805fa077df270000001000
20805fa028815fa08c805fa0000000030c0010a52432018cabaaaaaa88805fa0
17b7d138000010a500000002000080200000003004905fa0001000a403030303
74805fa000ff000000825fa080800000002006a4050505050606060614905fa0
1ffc0000000006a4070707071c985fa01c9c5fa0004006a4ffff000080d22753
80d22033628d48e001e1160f10e17ed21222047212227dd27dd30ce132221041
fc8f047200e179d212220472122279d179d2222179d17ad222217ad12e417ad1
ffe700e308e2722131111042fb8f087175d376d1122376d276d12921c8977b21
111375d1122200e1111274d2122274d2122274d105e2222173d00b40090040e7
fc37001771d1eee2b393202170d71c37202770d71c3720276fd71c3720271043
f38f01716dd46ed00b4005e5082001ee138fe61f6bd00b4009006bd46bd10b41
09246bdcc36dc51f4fa200ee69d220534cd22033998998af01e18b9566d467d0
0b4009000820e58de61f5cd45cd00b4005e50820018b03a102ee61d87b9b5fda
60d9b3650b4a83640820018bfaa002ee71900c389038f58fb36550d450d00b40
08e50820018befa003ee659556d453d00b4009000820028f10e1e7a003ee53d6
53d220677c6764633c633037028d1041dea004eef58f01724ed14b9210677c67
3bd31c3330633c633037028d1042d1a005eef38f017148d13c9210677c6735d3
1c3330633c633037028d1042c4a006eef38f017131d432d00b4002e50820018b
bca008ee3dd13ed2222104712592222101e13cd2122208721222047212223ad1
226001c8018d1041fa8b38d1126001c8028ffc71a4a009ee00e2222104711260
01c801899ea00aee18d1079262a0090036010048002800040040001800100900
c040018c11111111380000ff000018a500000080180018a54c0e00a02c805fa0
00001800a800018c0040018c000000100050018c00f0ff1f443322114040018c
000000ff100000ff2c0a018c000023ac0000ffff0000feff0000fdff5eb00000
6c06018c6600018cff7fffff6c00018cec31018c0041018c0000200c9809018c
0000210c0028210c0000220c1432018c000020ac000021ac000022ac04745fa0
0000230c0c745fa0801a060018745fa00c8d017110677c674ad31c3330633c63
3037f58d10420beef4aee61f46d110611c6183922031278f0cee44d110611c61
2031238f07ee42d110611c6120311f8b40d110611c6120311c8b00eedaaee61f
d8aee61fd6aee61fd4aee61fd2aee61fd0aee61fceaee61fccaee61fcaaee61f
c8aee61fc6aee61fc4aee61fc2aee61fc0aee61fbeaee61f017993600888038f
93680ca1017e936807e00d4847911928936001c90b2870e0860fd26af553326b
f3667076b36524d70b47a364071ff36778778366b36521d00b40a36440e2fc32
2e51f75010303d8f70e02f5128922921fe022031028de82edda001eecc8ff366
860f7076a36514d70b47a364036bf3667876836512d00b40a36440e2fc322e51
103b0189c9a002ee2f51099339212c522031b28d017902ee16a0e51fee000003
010309000000fdff001023ac002820ac002821ac004022acd409018c1000018c
2c00018c01eee51f59d10b4100e859d00b400900036158d956db0b4b136aa230
058f0361a030ffe22a381049f58b63e1163801ee028fef1f07a209004fd850d1
122850d10b41090082624fd34ad1326001c8018d1041fa8b4bd11261136001c9
081f136001c8018910a202e043d1126343d11033018b0ba203e040d1126040d1
1032038dff88018904a201e03bd11260ff885e893ad222213cd13dd222210471
3cd222210471629222213bd13bd22221147101e2222113622fd1226001c8018d
1041fa8b2dd112611c6113600688018909a204e029d22260294019403088028d
747202a204e022632dd220330189fea105e022d222d3322224d22ad332220472
24d33222047228d33222047227d33222047227d3322227d727d320e232270173
1042fb8f04771cd21cd33222147201e33222236310d2326001c8018d1042fa8b
0ed22260ff88048922600c6007880089181fa0a1090057afe51f55afe51ff550
0470051fe3600a882889ecae00e902200c06018c3c06018c80841e0000e100ac
785634128c05018c186c5fa000e000ac0000008000e1000c046c5fa000e0000c
56657273220000800c010022000000020000006414e000ac0000dec0047d73d1
103d018980adc51f71d8836c057cf36a547a70db84600c69ab80f3640b4b5f74
036168e0982929022031028d160f19a103eeab840c61c8909b201030028dc038
12a103eee68b64d8836e147e63dd64dc64db65da0b4d0900051f8669f3667876
9365f3640b4c747440e3fc333e52f361707110320189f9a004eef3617471a490
fe0210320189f3a004ee3c52f5512a219a21b9213f533a22a9222b211821028d
e038e7a004eed58b50d00b40f36b036a4fd9936e187e4fdd6c7b4fdc96680b4d
83640038028d02e0d6a005ee0a2868e0860fb365f3640b4c68740038028d40e2
cca006eefc322b51b031028d903ec7a006eee38b41d1181241d1191241d93dd8
0b48936440dbf3640b4b60743fd40b4807eef3640b4b64740b489364f3643cd1
0b41687440e7fc377a5278511032478fe51f36d11a17f3656c75f3642ed00b40
6874f36432d10b41687440e1fc311a521951103208ee338fe51f2ed00b4009ee
01882d8fe51f2cd00b400aee0188278fe51f2ad483600b400bee20d428d00b40
090028d110301b8fe51f27d424d00b4009000188148fe51f24d140e0fc301810
00e11a10f3656875f36421d10b41607440e3fc333a52385110320cee028de51f
42ae0900a36435a0836080001432018ce431018c4800018cd031018c6600018c
5000018cf2830070f38300708400018cb831018c7200018c7a00018c0000803f
00000040010004008005018c010024008605018c8a00018c9800018c01000c00
6805018c000080bf01000080785634127605018c0b40090044d800e1122844d1
0b41090082627e9110320dee088fe51ff36440d00b4068740788138f00eee51f
f2ad0900f0ade51feeade51fecade51feaade51fe8ade51fe6ade51fe4ade51f
e2ade51f0eeedfade51f33d9926833d10b41090064e1122931d120e222211362
30d1226020c8018f1041fa8b2ed00b40090029d182212ad120e2222103619c71
02e2263129011c31d8ad1f1f03a0081f01a0081f081f25d1126425d125d22363
136600e020e73365283540755026017600231047f78f01731cd31fd77223dc73
00e772231dd7122704772227047710e662271997722323651075136000eee71f
01e808a010e3d6af081fd4af081fd2af081f1043248924666c6604677c677036
f789f6af871f8001115409004440018c2c05018c4005018cc8805fa00c06018c
00695fa080841e003c06018c4000a0ff9040018c7040018c018200001000a0ff
6ed22062282203890192230209003e166bd2226210711032228df75ee82e018f
03eee71f67d268d112220171111267d100e332213111321133113411351164d7
32275fd32223136504731223047304e66223a893322710715bd004e813a004e3
5cd112615031d98ff75e5bd112611821d48ff75e56d1126002c8d38fe82eceaf
090010430789f75ee82efa8f56660036f789f6af871f4dd334533823048ff75e
47d3326330322589e82e2a8d05ee00e247d122212471422148d149d33b2149d3
222349d249d72227326320331b8d00e244d3222341d3222345d2222132632033
01ee248fea1f126241d110321b8ff3611fa0787137d222621032d58ff75ed7af
00e2d4afe71f726337d22033ffe22a622a1f00e233d3222330d3222334d22221
32632033df89fa5eeb6102711a1ff3617871399221213890118158e012810fe0
138133901481329015812ad100e220211871a0e2202128d228d1206008c8018f
1041fa8b24d1106008c81a8d09eef362787223d306e1256771231041fb8b21d1
0fe2222120d1139222210471f072222100e11ed30d940d950d961dd80c994aa0
00e2ecafe61f314420010002000383001f0fff0077772c01a10f09008040018c
1000a0ff6840018c0100feca5040018c1c00a0ff1400a0ff1800a0ff4c40018c
000000e0000014a50df0ad0b000014e52143341284705fa018705fa0a0860100
80705fa0002870a0402070a0000081a04b1714060a071360783001400c37f5e0
0d4797071a0013670837d59eec3771230172027361714632ec8f853151230172
02736032f78f617100e16cd21222047212220472c193322204721fe332220472
bc93322204721222047212220472122263d1b4922221047160e2222161d100e0
ae9500e6ad97ad935fd25630d62f019d230df66d0814612101707030f58f0271
00e15ad212220472122204729993322204721fe3322204729093322204721222
047212220472122204728c933222047248e3322288924ed32223047322230473
222304732223047322234ad212220472122249d17992222148d600e7769048d4
7598759373620922236106e55d412c311c312c3145310a021365283501455c32
1942094287021a022831629eec31112601771043e68f027600e13ad212220472
122204724d93322204721fe3322204724493322204724d933222047212220472
122231d13b922221047160e22221d87141922221f65007e11d401fcb40e2fc32
061200eeeb1fee1fed1fffeeec1f00eee91f92a700e8188d5a884d8f648823d1
2a922221019023008360901220d10b4102e4ffa109001ed10b4103e4faa10900
1bd10b4104e4f5a109001ad115922221019023008360641230f800011f3c1f0f
ff07001070170f0f00190242ff0fcf07011019fc00780342e003e07f040070a0
240070a0000082a090e80000840070a0ac0070a0c00070a0800070a0000083a0
6b6f4606040170a0240170a01c985fa0e405018c10905fa002890c911038138b
06d107d2222183606488178b05d10392222113a00900c8001f7c0900000070a0
01c200001c9c5fa0e79110380389019023008360b01173d173d2222173d174dc
122c74d1126340e2fc32331272dee2644412c265551201e2222120e1122e6fd1
122c6fd16fd612266fd712276fd170d0122070d1141f131f00e9921f911f6ed2
222f6eddba9700e66dd50b4d00e46ddbb41fb31f921f911f6bd1122f6bd700e6
67d50b4d00e46ada922a6ad392236ad492246ad592256ad692266ad792276ad0
92206ad19221830affe369d2322210e1122e68d1122c68d152d4122452d51225
52d753d67226b41fb31f921f911f52dee22f62d700e652d50b4d00e4922a55d0
922055d1922155d2922255d3922355d4922455d5922555d69226830affee54d7
e22757d112611821018b5ca101e255d1126177e22631028f01717ba1090051d2
122251d112600820018bd9a1090009e11630018b1ca20a8801704bd102212dd1
4ce0fe044221047150e0fe055221147154e0fe066221087144d22221047144d2
222144d111600d6043d111611f88028f1d6114a2090041d641d240e1236740e3
61271043fc8f027729901041f68f0c322691163829023bd1088f222119d13ad2
22211e911038018b38d1106118d117d2222134d112611821018902a2ffe718de
33dcc41f13d1131f32dbb21f32ddd11f11daa22f11d961a0ffe7a00000800001
03010601000070a0018200000000200060805fa048805fa04c805fa000007001
00007f0068805fa06c805fa00000008044815fa0000000430000003f4c0d018c
00008020000080429a99193fff0000ff000000e0040000e0080000e00c0000e0
100000e0140000e0180000e01c0000e014805fa00000740100003f0000ff00ff
2480018c2080018c1880018c00007f020000df01140a70a4c80a70a400f80000
804070a42880018c0000c700010071a00000dc4200008c420000004200e6c394
0b49e365c41f61d1131fb21f60d1111fa22f60d760d5b7940b4900e6c41f5fd1
131fb21f5ed1111fa22fffe75dd6ac940b49e3655cd1141f5cd1131f5cd1121f
d11fa22fffe700e65ad50b4900e45ad1141f5ad1131f5ad1121f5ad1111fa22f
ffe759d659d50b4908e459d159d2222159d25ad332220472e222047200e33222
047257d33222047232220472322204723222830100e048dd52dc13634edb52da
52d953d400e253d563a104e11638018b43a7836050d151d2222151d1ffe22221
50d10b41090050d110600fc90688018b34a509004dd1126118211f894cd11261
18211b8f0820028d09e198a501e240e4fc341e141f1447d1126004e700e600e5
f3640b40787478e0fe011821028d01e241d1222141d222610171122213a58360
3fd12cae09003fd122213fd2222c32d132d22221b41fb31f921f911f2bd1122f
3ad700e63ad50b4d00e4922a22d2922204729222047292220472922204729222
0472922204729222830a25d1ffe2222187ae09002fd111611d612fd00031f789
2ed101e27dae2221800088000000304300001043ffffff800000908000009043
000040430002003000005c420000c0420000f0410000002000002f4300009643
0000fa4200007a4300000e0c24008020000000e020000080040000e0000000c0
0000803f000043430c0000e00000003f100000e0180000e044815fa000000080
14805fa08c05018c8c705fa01080018c0880018cbc00008c0080018c0c80018c
000020002480018c00007801ff00ffff00008020280a78a41ff800001c80018c
54daa26c54d1cb21122a54d110e22221147153d2222153d153d2122204721222
52d153d2222153de53dbb41f53d1131f00e9921f911f52d1122f52dd869700e6
e3650b4d00e4b41fb31f921f911f4ed1122f4ed700e6e3650b4d00e44cd19221
4cd29222047292220472922204729222047292220472922204729222830146d1
ffe22221c22a45d101e22221e7ad0900fc8b43d111600d60407111611f88078d
1d6140d101e222213cd10be2d7ad22214d922c313cd33821f689f2af09004697
7c3139dee821068b36d112611821058936d6e1ad090035d6dead09003896dbad
090033d1141f33d1131f33d1121f33d1111f33d1122f00e61ed522d10b4100e4
edad090029071ceeed473b27722340e7fc377357722b2bd76227922a22240c77
222729dee2250877222783031041518d017002c840e6fc36d3160089c31601c8
22d6df8d038822d6ddaf290700802004e0070900f4805fa0000001004c805fa0
00007c0100003f0068805fa044815fa000000080000080200000804200000043
0000003f4c0d018c9a99193fff0000ff000000e0040000e014805fa01880018c
200a7ca41c80018cdfff000000f800000000484300809f430000704200005243
6666663f080000e00000803f0000574300006b4385daa41f85d1131f85d9921f
85d1111f85dee22fffe785d685d586d00b4008e4a41f85d1131f921f84d1111f
e22fffe783d684d57fd10b4108e483da83d4422a83dd84d2222d84db84d1122b
84dc85d6622c00e984d3922384d5922584d7922784d09220830ab22a83d1122d
83d7722be22c92239225ffe2087322239220830ab22a122d7ed3322be22cfc75
92257dd1f87012200875222508709220830ab22a79d0022d722be22cf8751225
047592250475222504759225830a74d5522a022d322be22c68d0122004701220
0470222004709220830a422a5ed4422d6cd4422b622c61d69226f870922061d4
92240c769226830ab22a67d6622d722be22cfc709220fc749224087022200874
9224830ab22a622d322be22c53d69226fc701220fc7422240c769226830ab22a
5ad6622d722be22c4cd712279220222408709220830a522a622d322be22c1227
47d3122322249220830a51d2241f131f621f50d1111fe22fffe737d5559432de
0b4e00e64cd1122a37d0022d32d1122b4ad1122c30d339d232222ed538d45224
38d6922638d79227830a00e300e2c36b636affe9736421a004e5236740d141dc
236641dddb2725dd722d26de022e27d0c2201ad7722b29dc122c29d76227922a
2224830d122d622e9220222b222c2227222a2224830d10456c8d017302e13360
02c8028d3921c0a401c801c801897da403882ed01821d08f13672adcd1af1366
2ad027d12adcccaf1366800000006b430000f04100005743000020410000003f
00c00034002080204c0d018c00005c4200000c4200c0003600008020000000e0
08000080040000e0000000c0080000e0002480200c0000e000c80088100000e0
140000e0180000e01c0000e00000f0420000e041000050420000004300002043
080000f00004802000002443000040430000604300008042c800008000020030
0000803f00005643c80000e00000484300006c43d36abdd1122de36dbcd1122e
036cbcdee220bcdb00e9922b087092209227bad29222bade922e830aa22ab9d1
122db9d1122cb9d1122b92209227b8d2b2d42224922e830aa22ab6d2222db6d2
222c122b92209227b4d22224922e830ab3d2222ab3d2222db3d2222c122b9220
9227b2d11224922e830a922a922d922c922b922092279224922e830aacd5add6
611fadd1122fadd75366add00b4000e4a8d1111fabd1122fabd7acd6acd5a8d2
0b4200e4abd1122a922d922c922b02e2a9d3222306e1a9d4122490d52225122e
830a9cd6611fa2d7722fa5d7a5d6a6d5a6d49bd00b400900922a922d922c922b
9dd192219dd2922284d39223922e830a9fd4441f9fd1131f9fd5521f9fd6611f
9fd7722f9fd6a0d5a0d4a1d00b40ffe797d1141f9fd1131f97d2221f9ed1111f
97d3322f9dd698d598d499d00b40ffe7922a922d922c922b87d1922187d29222
6ed39223922e830a95d4441f8bd5531f94d6621f94d7711f94d0022f94d795d5
95d48bd10b4100e68dd2241f93d3331f8cd4421f92d5511f92d6622f92d78dd5
8dd483d00b4000e6922a922d922c922b71d1922171d2922258d39223922e830a
8ad18bd222218bd1141f8bd1131f8bd1121f8bd1111f8bd1122f8bd700e64dd5
73d00b4000e461d1141f88d1131f7bd2221f87d1111f6ad3322f86d786d58294
6bd00b4000e6922a922d922c922b5ad192215ad2922241d39223922e830a7fd4
422f7fd77fd680d580d481d00b4009007ad180d780d681d581d47dd20b42122f
4ad3341f55d4431f64d5521f5ed6611f5ed7722f5ed75fd55fd455d00b4000e6
42d1141f5dd2231f221f5dd3311f5dd4422f5dd757d558d44dd00b4000e6922a
922d922c922b3cd192213cd2922223d39223922e830a6bd1ffe2222134911038
0189adab090068d268d1226001c8018d1041fa8b66d167d2222167d167d22221
047167d22221047166d22221047142d22221047164d2222164d365d220e12223
01721041fb8f047362d163d22221147101e22221136255d1226001c8018d1041
fa8b80ab090080009600090002000080000000c0000080200c0000e0180000e0
1c0000e0333321426666e7421f856b3f1010e0ff9a19164366e64d4310e010ff
000000f0cd4c914333330243e01010ff0000a0420000403f0000c84200007043
1c0c018c00006f43000074430000524300005c4300000020100000e0140000e0
0000004300004443000080420000020000005c42000068430000f04100004843
0000003f00c4003000009020080000044c0d018c00008d4300007a4300c60030
00002a430000024300000c439a99193fff000080000090940000000200003443
0000f0429a99993e0000ff8060815fa0000000800000d84200008c420000be42
000020423333333fffff00ff0000964300008043ffffff80000090806666663f
0000d442000082420000c24200003442fc0c018c00004d430000914300003943
0000874314805fa0186c5fa080841e0000e100ac7856341200e000ac22000080
00e1000c0c0100220000006514e000ac0001dec0046c5fa000e0000c63d22261
0171122283603c88028f4288a9a00900048ffb5ee82e018ba8a009005cd10b41
09005cd10b4110e45bd1126283639c73aa911633028ff951c6a009002831fc5e
163e008b1c1ffd5e123e00891d1ffe5e1c3eee1f291f00e148e0fe022822038d
1821018922a10900028d3fe112a1fd521638018bc2a08360017883603c88028f
3ce17da809001638018b64a846881e88028f2d886aa80900028f0f886ba80900
01899fa183603dd10b4101e4836208422c3208428c32184209428c3265911922
83603fc9036108410c31184134d33c3134d321211043fc8f027151aa090032d1
222100e131d210220c720ae33022047210222fd1a0e220212ed22fd1206008c8
018f1041fa8b2bd1106008c8238d13e26871212100e221210ae3312121212121
212124d224d1206008c8018f1041fa8b20d1106008c811896871116211601162
116211611ad220620fc918401c610b211ad257af12221ad1faaf090018d1f7af
090018d00b4000e404a00b1f15d00b4001e40b1f06d10b41090006d10b4110e4
05d1126267af291f9500ff7f1080018c0c06018c4c06018c0c00d8ffe405018c
000000a500a000000880018c84705fa09c705fa018705fa0a08601000480018c
ffff0000a007018caa9110381f8ff55ee82e1c8956d1a493322156d1ec31291f
55d2122255d112611821078d8360226253d11032038f01c8c2a00ae201c8018b
e1a009004fd150d2122236af017887911038b78fce71fd53fc5ee8331633268d
fe5e4ad3ec337d911633268d44e0fe000820278df65e3ed175933221291ffe5e
42d2ec326e9116325e8d44e0fe0008205d8ff65ee82e5d8f48e0fe0008205c8f
ff5ee82e278df85039d1b9afec3130d15a93322137d1b3af291f2dd155933221
ddaf291fe82e0e8d58e029d1fe000221291ffd52fc5ee832449116322dd19f8d
fe5ecdaf0900291fd6ae01e120d13d922221efaffd520820038df75e26d18faf
0c31e82e028925d18aafec31fa5ee82e028923d184afec31fb5ee82e038d40e0
20d17dafec3101e1fe021732038f40e01dd175af2c31fe000188028910d16faf
09001ad16caf090019d169af090019d166af090018d163af090018d160af0900
fa00e003c8001f7c007cff03007e090010905fa00001d0ba4840018c1080018c
0d600d600000400050805fa043c721fe0008d0ba0200d0ba0009d0ba000ad0ba
000bd0ba000dd0ba0007d0ba4d4d0d600300d0ba0400d0ba0500d0ba0600d0ba
5bd11261c971263112895ad112611821138959d11262a9911032028957d108a0
090057d1126118210a8956d101a0090055d156d2122221af836055d1f9af0900
54d1f6af090054d11daf090029071ce61821028d6d4783ab090050d050dc51d6
4fab090003c903880189bfa83fe13fe11638028d83605aae836201c8018befa8
090049d1019c230c090034ee47d222621071203102ee068fe71f45d112615031
02ee048de71f019223020900b8e9019123010900f6e93360038829071ce11d47
3cd038d136dc1cab1366f48f182139d041ab09004121017002715630058f20c8
d62f019d230df66deeebf38f2364f1af336401a093628362212101700271a630
f78f0388f78d46302c8f66302c8b312101705888f38f027127d12892222127d2
27d1292127d33b2113662367e07726d518e352271043fc8f047724d30ce77223
fc7310e7722322d708e3722101771043fb8f047183061ed700e101e601952305
08e3a6dec8af5362c6af7362280680000c80018c0880018c0480018c030cd0ba
0080018c040cd0ba010cd0ba4840018c020cd0ba9d5a0d600000200000004843
00006c430000803f000040001000a0ff1400a0ff000070431c815fa0e040018c
e0ffff03000000e0111111113c0000ffe0ffc000400000006400000000000000
400100000e00000000000000100000000a000000000000000100040000000400
0300040001000c00010024000100040001000000020000000001000000020000
0303000000017f80ff000000000000000100000002000000ffffff7f00000080
01000080ffffffff78563412efbeadde000001005345474120534547414b4154
414e4120000000000000000017b7d1380000000000000000ffffffff00002044
0000000017b7d1380000803f00000000ffffffff000000000000f04317b7d138
000000000000803fffffffff
""")
# The program built with -DLIVE_CULL (live_prog.c): with two modifier
# volumes and two translucent polygons that differ only in their ISP cull
# modes, for the Vulkan renderers' cull mode set with the draws
# (tools/vulkan/vk_pipelines.sh).
PROGRAM_CULL = bytes.fromhex("""
01df02d02b40090000f0008ce00f018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018cf47ff361319221214d6229444c602d9323673927
7b2011812c60128100e013815d6229455c6029233b2014812c6015810fd101e2
20211871a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f362
09d706e1256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa0
18705fa0a086010080705fa027d100e220210c71602163621942047120210871
a0e2202122d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed34562
21231041fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d
536400e014d70174180063610a3101416362017202e33232078d017105a001e1
194224041041098d027071622d62036301736233f48f2405f5af104107d11061
0b0001e00b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0
862f962fa62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba0
09e0fc840fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288
608f01e0f3620c7225840c63284326840c6118613b2127840c600b21b9931c33
b8922633018b9ea001e08828488d83605cd222621032018b97a002e00ee6f365
59d457d00b400c750820018b8fa009e0f3600c700184118801898aa003e0f360
0c7004840188018985a003e0f3600c7005840288018980a003e0f3620c722b84
0c6328432c840c6118613b212d840c622b217e922c317d922631018b6fa003e0
64e6f36541d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce9
38d2122248a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af
6f801049088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca0
0ae01c311042068dff736821f9891c314a21f7af1d611040068954622c621842
2a217363f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c62
136319433032228ff3622b840c621c611032ffe00a600840707f264ff66bf66a
f6690b00f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf
0900e9af09e0e7af04e0e5af04e0e3af04e0a8fd2b01800021100900e833018c
ec06018c1480018cdc33018cd033018c00800000ffff00000ad1422104715221
01e109d21222087212220472122207d1226001c8018d1041fa8b05d1126001c8
0b00290004745fa00c745fa000093d0018745fa0626113671947014725922821
ffe22a62436300432903136001402444136019407a2001c8108943605c302a23
063429073a2773611841236318433c333b21203729022b210b00122643605830
2a2346302907eeaf3a27000249d1126249d11032048d00e248d122210b0000e0
47d148d2122248d221521032718b47d112600188028d11e00b00090044d345d1
3111047144d2292144d645d772166c921b222316726230325d8f00e341d23222
736301e77223226360922033558b39d2215337d22033df8f13e03bd23bd33112
3bd334d733173bd773123bd226164e921b22271639d222623032cd8f16e038d2
2dd3392243932b23371624d305e7722332d332672fd33037318b32d32fd73227
29d7735730372c8b22d3335728d33037b28f18e02cd778162a977b2119162bd1
01e332212ad1126321d11033a48f19e025d338167b22291624d102e2222124d1
126220d110320e8f00e220d122210b0001e00b0011e00b0012e00b0013e00b00
17e00b0018e00b001ae01601c0003601340109000000001044332211100000ff
88776655040000100050018c4040018c5555aaaafc5f018c00f0ff1f0040018c
001000104440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c00030001008300010
0070018cc1c1c1c100400010000000ff08400010862f962fa62fb62fc62fd62f
e62ff75ef85df95c1be11d4421d11b2421d222d1122222db422b22da22d1122a
22d900e1122922d8122822d0122022d4122422d3122383022222722be22a6229
122812205224122383022222722bc22a6229122812205224122383022222d22b
e22a62291228122052241223830214d77222d22bc22a62291228122052241223
8302f66ef66df66cf66bf66af6690b00f6680900000000c0000000e000000082
040000e0080000e0000090940c0000e0100000e0140000e0180000e01c0000e0
000000f0862f962ff45110d2222210d8422810d0522010d4122410d5622510d6
722610d7122710d3f25992238302f3599222122800e112201224122512261227
12238302f6690b00f6680900000000e0040000e0080000e00c0000e0100000e0
140000e0180000e01c0000e0862f962fa62fb62fc62fd62fe62f224ff07f536b
636a7369fd5e2ad11b24431f29dd422d00e829d1822129d28222087182210872
8222087182210872822208718221830de21f611f722f22dcfc575366a3650b4c
b364e21ffc52211f922f2367b366a3650b4c93641bdee21fa11f922ffc57b366
a3650b4cb364f351122d17d112d2122212d18221087282220871822108728222
0871822108728222830de21ffc51111f922f1367b366a3650b4c9364107f264f
f66ef66df66cf66bf66af6690b00f66800000081000000e0040000e0080000e0
840c018c0000803e00000024224ff87ff351111f722f6367536643650cd10b41
00e40cd200e112220bd312230473122304731223047312230473122304731223
047312238302087f264f0b0009000900ec0c018c000000e0040000e0862f962f
a62fb62fc62fd62fe62f224ff07f536b636a7369fd5e1be11d44431f2adc2bd2
222cf3522ad1222100e80471822129d282220871822108728222087182210872
8222830ce21f611f722f23ddfc575366a3650b4db364e21ffc51111f922f1367
b366a3650b4d93641cdee21fa11f922ffc57b366a3650b4db36419d1f3522b21
12d2222c12d2122216d182210872822208718221087282220871822108728222
830ce21ffc51111f922f1367b366a3650b4d9364107f264ff66ef66df66cf66b
f66af6690b00f668000000e000000081040000e00c0000e0840c018c0000803e
00000024080000e0862f962fa62fb62fc62fd62fe62ff75cf85bf95e24d14b21
24d2122224da25d1122a25d9522925d8622825d000e1122024d5122524d61226
24d312238302436d2b2dd222b22ae229c22812201225722612238302d222b22a
fb5bb229c22812201bdbb225722612238302d222fa5dd22ae229c228b2201225
72261223830215dddb244222fa54422afb5dd229c228b220b225722612238302
f66ef66df66cf66bf66af6690b00f66800000080000000e0040000e0000000c0
080000e00c0000e0100000e0140000e0180000e01c0000e00000803f000000f0
862f962fa62fb62fc62fd62fe62f224fbc7fc07f9bd112619bd2266526662267
9ad2266322625b216b217b213b212b2144e0160f96d11060fec90021ffe295d3
22230473222300e204732123106001cb002191d1126091d3392005cb02211871
8fd33221f471222110718ed222216c718dd222219c718dd2222104718cd22221
10718cd222218cd18cd212228cd212228cd18dd222218dd600e38dd88dd412e7
45330a02094223611c3113652c355c353369583953609c3008408e0112260173
1047ed8f047684d184d2222184d185d22221047184d22221047184d2222184d1
c59222210471c392222104711fe222210471be9222217fd27fd310e132221041
fc8f04727dd1b59222213c717cd222210871077222217bd27bd3ac9132221041
fc8f047279d17ad77ad310e27221a3961c3632261042f98f047177d177d22221
04719a92222176d276d310e132221041fc8f04721fe174d2122274d2122274d1
00e002ea00e973d807e41fe58697869317e6d62f019d230df66da0211043058d
017726657035f989f8af63616ad227536ad22033648d48e001e1160f10e168d2
12220472122267d267d30ce132221041fc8f047200e163d212220472122263d1
63d2222163d164d2222164d12e4164d1ffe700e308e2722131111042fb8f0871
5fd360d1122360d260d1292148977b2111135fd1122200e111125ed212225ed2
12225ed105e222215dd00b40090040e7fc3700175bd1eee2339320215ad71c37
20275ad71c37202759d71c3720271043f38f017157d458d00b4005e5082001ee
028de61fb4a0090054d00b40090054d454d10b41092454dcc36dc51fbda200ee
52d2205335d22033978996af01e1007ce003ff7f8001800000101f7ce00700f8
36010048846c5fa0f46c5fa0c0785fa00400d8ff0800d8ff44805fa000008000
3f7d1700000020000401150000007f020000df0177df27000000100020805fa0
28815fa08c805fa0000000030c0010a56034018cabaaaaaa88805fa017b7d138
000010a500000002000080200000003004905fa0001000a40303030374805fa0
00ff000000825fa080800000002006a4050505050606060614905fa01ffc0000
000006a4070707071c985fa01c9c5fa0004006a4ffff0000c040018c11111111
380000ff000018a500000080180018a54c0e00a02c805fa000001800a800018c
0040018c000000100050018c00f0ff1f443322114040018c000000ff100000ff
2c0a018c000023ac0000ffff0000feff0000fdff5eb000006c06018c6600018c
ff7fffff6c00018c2834018c0041018cbd9562d462d00b4009000820028fe61f
42af09005fd460d00b4005e50820018ba3a002ee5dd8ab9b59da5dd9b3650b4a
83640820018b9aa002eea1900c389038f58fb36553d454d00b4008e50820018b
8fa003ee959553d44dd00b4009000820028f10e187a003ee4fd650d220677c67
64633c633037028d10417ea004eef58f01724bd17b9210677c674ad31c333063
3c633037028d1042a8a005eef38f017145d16c9210677c6744d31c3330633c63
3037028d10429ba006eef38f017135d435d00b4002e50820018b93a008ee3cd1
3cd2222104715592222101e13ad21222087212220472122238d1226001c8018d
1041fa8b36d1126001c8028ffc717ba009ee00e222210471126001c8018975a0
0aee30d1379202a009000c8d017110677c672dd31c3330633c633037f58d1042
0beeb1aee61f29d110611c61249220315e8f0cee26d110611c6120315a8f07ee
24d110611c612031568b23d110611c612031538b00ee97aee61f95aee61f93ae
e61f91aee61f8faee61f8daee61f00280004004000180010ee0009000000200c
9809018c5eb000006c06018c0000210c0028210c0000220c5034018c000020ac
000021ac0000ffff000022ac0000feff04745fa00000230c0c745fa0801a0600
18745fa0000023ac0000fdff001023ac002820ac002821ac004022ac54aee61f
52aee61f50aee61f4eaee61f4caee61f4aaee61f48aee61f46aee61f44aee61f
017993600888038f936800a1017e936807e00d4846911928936001c90b2870e0
860fd26af553326bf3667076b3651ed70b47a364071ff36778778366b3651bd0
0b40a36440e2fc322e51f7501030318f70e02f5127922921fe022031028de82e
d1a001eecc8ff366860f7076a3650ed70b47a364036bf366787683650cd00b40
a36440e2fc322e51103b0189bda002ee2f51089339212c522031b28d017902ee
0aa0e51f00030103d409018c1000018c2c00018c01eee51f59d10b4100e859d0
0b400900036158d956db0b4b136aa230058f0361a030ffe22a381049f58b63e1
163801ee028fef1f07a209004fd850d1122850d10b41090082624fd34ad13260
01c8018d1041fa8b4bd11261136001c9081f136001c8018910a202e043d11263
43d11033018b0ba203e040d1126040d11032038dff88018904a201e03bd11260
ff885e893ad222213cd13dd2222104713cd222210471629222213bd13bd22221
147101e2222113622fd1226001c8018d1041fa8b2dd112611c61136006880189
09a204e029d22260294019403088028d747202a204e022632dd220330189fea1
05e022d222d3322224d22ad33222047224d33222047228d33222047227d33222
047227d3322227d727d320e2322701731042fb8f04771cd21cd33222147201e3
3222236310d2326001c8018d1042fa8b0ed22260ff88048922600c6007880089
181fa0a1090057afe51f55afe51ff5500470051fe3600a882889f8ae00e90220
0c06018c3c06018c80841e0000e100ac785634128c05018c186c5fa000e000ac
0000008000e1000c046c5fa000e0000c56657273220000800c01002200000002
0000006414e000ac0000dec0047d73d1103d018912adc51f71d8836c057cf36a
547a70db84600c69ab80f3640b4b5f74036168e0982929022031028d160f19a1
03eeab840c61c8909b201030028dc03812a103eee68b64d8836e147e63dd64dc
64db65da0b4d0900051f8669f36678769365f3640b4c747440e3fc333e52f361
707110320189f9a004eef3617471a490fe0210320189f3a004ee3c52f5512a21
9a21b9213f533a22a9222b211821028de038e7a004eed58b50d00b40f36b036a
4fd9936e187e4fdd6c7b4fdc96680b4d83640038028d02e0d6a005ee0a2868e0
860fb365f3640b4c68740038028d40e2cca006eefc322b51b031028d903ec7a0
06eee38b41d1181241d1191241d93dd80b48936440dbf3640b4b60743fd40b48
07eef3640b4b64740b489364f3643cd10b41687440e7fc377a5278511032478f
e51f36d11a17f3656c75f3642ed00b406874f36432d10b41687440e1fc311a52
1951103208ee338fe51f2ed00b4009ee01882d8fe51f2cd00b400aee0188278f
e51f2ad483600b400bee20d428d00b40090028d110301b8fe51f27d424d00b40
09000188148fe51f24d140e0fc30181000e11a10f3656875f36421d10b416074
40e3fc333a52385110320cee028de51f42ae0900a36435a0836080005034018c
2034018c4800018c0c34018c6600018c5000018cf2830070f38300708400018c
f433018c7200018c7a00018c0000803f00000040010004008005018c01002400
8605018c8a00018c9800018c01000c006805018c000080bf0100008078563412
7605018c0b40090044d800e1122844d10b41090082627e9110320dee088fe51f
f36440d00b4068740788138f00eee51ff2ad0900f0ade51feeade51fecade51f
eaade51fe8ade51fe6ade51fe4ade51fe2ade51f0eeedfade51f33d9926833d1
0b41090064e1122931d120e22221136230d1226020c8018f1041fa8b2ed00b40
090029d182212ad120e2222103619c7102e2263129011c31d8ad1f1f03a0081f
01a0081f081f25d1126425d125d22363136600e020e733652835407550260176
00231047f78f01731cd31fd77223dc7300e772231dd7122704772227047710e6
62271997722323651075136000eee71f01e808a010e3d6af081fd4af081fd2af
081f1043248924666c6604677c677036f789f6af871f8001115409004440018c
2c05018c4005018cc8805fa00c06018c00695fa080841e003c06018c4000a0ff
9040018c7040018c018200001000a0ff6ed2206228220389019223020900ea16
6bd2226210711032228df75ee82e018f03eee71f67d268d112220171111267d1
00e332213111321133113411351164d732275fd32223136504731223047304e6
6223a893322710715bd004e813a004e35cd112615031d98ff75e5bd112611821
d48ff75e56d1126002c8d38fe82eceaf090010430789f75ee82efa8f56660036
f789f6af871f4dd334533823048ff75e47d3326330322589e82e2a8d05ee00e2
47d122212471422148d149d33b2149d3222349d249d72227326320331b8d00e2
44d3222341d3222345d222213263203301ee248fea1f126241d110321b8ff361
1fa0787137d222621032d58ff75ed7af00e2d4afe71f726337d22033ffe22a62
2a1f00e233d3222330d3222334d2222132632033df89fa5eeb6102711a1ff361
7871399221213890118158e012810fe0138133901481329015812ad100e22021
1871a0e2202128d228d1206008c8018f1041fa8b24d1106008c81a8d09eef362
787223d306e1256771231041fb8b21d10fe2222120d1139222210471f0722221
00e11ed30d940d950d961dd80c994aa000e2ecafe61f31442001000200038300
1f0fff0077772c01a10f09008040018c1000a0ff6840018c0100feca5040018c
1c00a0ff1400a0ff1800a0ff4c40018c000000e0000014a50df0ad0b000014e5
2143341284705fa018705fa0a086010080705fa0002870a0402070a0000081a0
4b1714060a071360783001400c37f5e00d4797071a0013670837d59eec377123
0172027361714632ec8f85315123017202736032f78f617100e16cd212220472
12220472c193322204721fe332220472bc933222047212220472122204721222
63d1b4922221047160e2222161d100e0ae9500e6ad97ad935fd25630d62f019d
230df66db414612101707030f58f027100e15ad2122204721222047299933222
04721fe3322204729093322204721222047212220472122204728c9332220472
48e3322288924ed32223047322230473222304732223047322234ad212220472
122249d17992222148d600e7769048d47598759373620922236106e55d412c31
1c312c3145310a021365283501455c321942094287021a022831629eec311126
01771043e68f027600e13ad212220472122204724d93322204721fe332220472
4493322204724d933222047212220472122231d13b922221047160e22221d871
41922221f65007e11d401fcb40e2fc32061200eeeb1fee1fed1fffeeec1f00ee
e91fe8a700e8188d5a884d8f648823d12a9222210190230083603c1320d10b41
02e4ffa109001ed10b4103e4faa109001bd10b4104e4f5a109001ad115922221
019023008360101330f800011f3c1f0fff07001070170f0f00190242ff0fcf07
011019fc00780342e003e07f040070a0240070a0000082a090e80000840070a0
ac0070a0c00070a0800070a0000083a06b6f4606040170a0240170a01c985fa0
e405018c10905fa002890c911038138b06d107d2222183606488178b05d10392
222113a00900c8001f7c0900000070a001c200001c9c5fa0e791103803890190
230083605c1273d173d2222173d174dc122c74d1126340e2fc32331272dee264
4412c265551201e2222120e1122e6fd1122c6fd16fd612266fd712276fd170d0
122070d1141f131f00e9921f911f6ed2222f6eddba9700e66dd50b4d00e46ddb
b41fb31f921f911f6bd1122f6bd700e667d50b4d00e46ada922a6ad392236ad4
92246ad592256ad692266ad792276ad092206ad19221830affe369d2322210e1
122e68d1122c68d152d4122452d5122552d753d67226b41fb31f921f911f52de
e22f62d700e652d50b4d00e4922a55d0922055d1922155d2922255d3922355d4
922455d5922555d69226830affee54d7e22757d112611821018b5ca101e255d1
126177e22631028f01717ba1090051d2122251d112600820018bd9a1090009e1
1630018b1ca20a8801704bd102212dd14ce0fe044221047150e0fe0552211471
54e0fe066221087144d22221047144d2222144d111600d6043d111611f88028f
1d6114a2090041d641d240e1236740e361271043fc8f027729901041f68f0c32
2691163829023bd1088f222119d13ad222211e911038018b38d1106118d117d2
222134d112611821018902a2ffe718de33dcc41f13d1131f32dbb21f32ddd11f
11daa22f11d961a0ffe7a0000080000103010601000070a00182000000002000
60805fa048805fa04c805fa00000700100007f0068805fa06c805fa000000080
44815fa0000000430000003f080f018c00008020000080429a99193fff0000ff
000000e0040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0
14805fa00000740100003f0000ff00ff2480018c2080018c1880018c00007f02
0000df01140a70a4c80a70a400f80000804070a42880018c0000c700010071a0
0000dc4200008c420000004200e6c3940b49e365c41f61d1131fb21f60d1111f
a22f60d760d5b7940b4900e6c41f5fd1131fb21f5ed1111fa22fffe75dd6ac94
0b49e3655cd1141f5cd1131f5cd1121fd11fa22fffe700e65ad50b4900e45ad1
141f5ad1131f5ad1121f5ad1111fa22fffe759d659d50b4908e459d159d22221
59d25ad332220472e222047200e33222047257d3322204723222047232220472
3222830100e048dd52dc13634edb52da52d953d400e253d563a104e11638018b
99a7836050d151d2222151d1ffe2222150d10b41090050d110600fc90688018b
8aa509004dd1126118211f894cd1126118211b8f0820028d09e1eea501e240e3
fc331e131f1347d1126004e700e600e5f3640b40787478e0fe011821028d01e2
41d1222141d222610171122269a583603fd12cae09003fd122213fd2222c32d1
32d22221b41fb31f921f911f2bd1122f3ad700e63ad50b4d00e4922a22d29222
047292220472922204729222047292220472922204729222830a25d1ffe22221
87ae09002fd111611d612fd00031f7892ed101e27dae22218000880000003043
00001043ffffff800000908000009043000040430002003000005c420000c042
0000f0410000002000002f43000096430000fa4200007a4300000e0c24008020
000000e020000080040000e0000000c00000803f000043430c0000e00000003f
100000e0180000e044815fa00000008014805fa08c05018c8c705fa01080018c
0880018cbc00008c0080018c0c80018c000020002480018c00007801ff00ffff
00008020280a78a41ff800001c80018c54daa26c54d1cb21122a54d110e22221
147153d2222153d153d212220472122252d153d2222153de53dbb41f53d1131f
00e9921f911f52d1122f52dd869700e6e3650b4d00e4b41fb31f921f911f4ed1
122f4ed700e6e3650b4d00e44cd192214cd29222047292220472922204729222
047292220472922204729222830146d1ffe22221c22a45d101e22221e7ad0900
fc8b43d111600d60407111611f88078d1d6140d101e222213cd10be2d7ad2221
4d922c313cd33821f689f2af090046977c3139dee821068b36d1126118210589
36d6e1ad090035d6dead09003896dbad090033d1141f33d1131f33d1121f33d1
111f33d1122f00e61ed522d10b4100e4edad090029071ceeed473b27722340e7
fc377357722b2bd76227922a22240c77222729dee2250877222783031041518d
017002c840e6fc36d3160089c31601c822d6df8d038822d6ddaf290700802004
e0070900f4805fa0000001004c805fa000007c0100003f0068805fa044815fa0
000000800000802000008042000000430000003f080f018c9a99193fff0000ff
000000e0040000e014805fa01880018c200a7ca41c80018cdfff000000f80000
0000484300809f4300007042000052436666663f080000e00000803f00005743
00006b4385daa41f85d1131f85d9921f85d1111f85dee22fffe785d685d586d0
0b4008e4a41f85d1131f921f84d1111fe22fffe783d684d57fd10b4108e483da
83d4422a83dd84d2222d84db84d1122b84dc85d6622c00e984d3922384d59225
84d7922784d09220830ab22a83d1122d83d7722be22c92239225ffe208732223
9220830ab22a122d7ed3322be22cfc7592257dd1f87012200875222508709220
830ab22a79d0022d722be22cf8751225047592250475222504759225830a74d5
522a022d322be22c68d01220047012200470222004709220830a422a5ed4422d
6cd4422b622c61d69226f870922061d492240c769226830ab22a67d6622d722b
e22cfc709220fc7492240870222008749224830ab22a622d322be22c53d69226
fc701220fc7422240c769226830ab22a5ad6622d722be22c4cd7122792202224
08709220830a522a622d322be22c122747d3122322249220830a51d2241f131f
621f50d1111fe22fffe737d5559432de0b4e00e64cd1122a37d0022d32d1122b
4ad1122c30d339d232222ed538d4522438d6922638d79227830a00e300e2c36b
636affe9736421a004e5236740d141dc236641dddb2725dd722d26de022e27d0
c2201ad7722b29dc122c29d76227922a2224830d122d622e9220222b222c2227
222a2224830d10456c8d017302e1336002c8028d392116a501c801c80189d3a4
03882ed01821d08f13672adcd1af13662ad027d12adcccaf1366800000006b43
0000f04100005743000020410000003f00c0003400208020080f018c00005c42
00000c4200c0003600008020000000e008000080040000e0000000c0080000e0
002480200c0000e000c80088100000e0140000e0180000e01c0000e00000f042
0000e041000050420000004300002043080000f0000480200000244300004043
0000604300008042c8000080000200300000803f00005643c80000e000004843
00006c4380dee41f80d0031f80d1121f80d9911f80d1122f80dbffe780d5f294
0b4b00e67fd2241f78d3331f7ed1121f911f79d4422fffe779d5e4940b4b00e6
d36a00e9922d047d922df87c922c77d5922577d6922677d7922777de922e77d0
9220830a76d1111f76d2222f76de77d777d678d50b4e02e471d3311f76d4422f
72d770d673d50b4e03e474d56cd6611f73d1122f73de74d753660b4e00e468d7
711f72d1122f72d772d673d50b4e00e472d1122a922d922c5cd0922002e25cd1
222106e15bd312235bd422245bd51225830a5bd6611f68d7722f69d751d669d5
69d40b4e0900922a922d922c4fde922e4fd092204fd192214fd292224fd39223
830a62d4441f62d1131f62dee21f52d5511f41d6622f60d660d561d40b4bffe7
5ad7741f5fd0031fe21f5fd1111f3ad2222f5ed659d55ad40b4bffe7922a922d
922c3ad392233ad492243ad592253ad692263ad79227830a2bdee41f3ed0031f
53dee21f53d1111f53d2222f53d754d554d40b4b00e624d3341f53d4431fe21f
52d5511f52d6622f52d74dd54dd40b4b00e651d1141f51d1131f46d7721f42de
e11f4bd0022f4ed745d546d40b4b00e615d1121f4bd1111f4bdee22f4bd73ed6
4bd54cd20b4202e40fd3321f4ad1111fe22f34d738d649d546de0b4e03e4922a
922d922c11d0922011d1922111d2922211d3922311d49224830a41d141d22221
41d183a0141f800000002a430000204200001643000000410000003f080f018c
0000802000004443000030430c0000e0100000e0140000e0180000e01c0000e0
0000403f00002e431c0e018c000030420000124300008040000048430000a042
0000c842ec0c018c0000704300006f43000074430000524300005c4300000020
00000043000080420000020000005c42000068430000f04100c4003000009020
0800000400008d4300007a4300c600300000024300000c439a99193fff000080
0000909400000002000034430000f0429a99993e0000ff8000002f4300009b43
00ff008000008c430000114300007f4300ffff80b40b018c00009943ff00ff80
60815fa0000000800000d8424fd1131f4fd1121f4fd5511f4fd1122f4fd700e6
4fd50b4b00e44fd6641f4fd1131f4fd7721f4fd1111f4fdee22f4fd74fd58394
0b4b00e6922a922d922c4dd092204dd192214dd292224dd392234dd49224830a
4cd5522f4cde4dd74dd64ed54ed40b4e090048d6622f4dd74dd64ed54ed40b4e
090038d7741f4ddee31f38d0021f4cd1111f4cd2222f4cd74cd54dd40b4b00e6
30d3341f31d4431f421f4ad5511f4ad6622f4ad745d546d40b4b00e6922a922d
922c2fd792272fde922e2fd092202fd192212fd29222830a41d1ffe222213491
1038018904ab09003ed23fd1226001c8018d1041fa8b3dd13dd222213dd13ed2
222104713dd2222104713dd2222104712fd2222104713bd222213bd33bd220e1
222301721041fb8f047339d139d22221147101e2222113622bd1226001c8018d
1041fa8bd7aa09008000960000008c420000be42000020423333333fffff00ff
00008020000052430000964300003443000080430000003fffffff8000009080
0c0000e0100000e0140000e0180000e01c0000e06666663fcc0d018c0000d442
000082420000c2420000344200004d4300009143000039430000874300004843
00000c439a99193fff00008000009094000000020000f0429a99993e0000ff80
14805fa0186c5fa080841e0000e100ac7856341200e000ac2200008000e1000c
0c0100220000006514e000ac0001dec0046c5fa000e0000c63d2226101711222
83603c88028f4288a9a00900048ffb5ee82e018ba8a009005cd10b4109005cd1
0b4110e45bd1126283639c73aa911633028ff951c6a009002831fc5e163e008b
1c1ffd5e123e00891d1ffe5e1c3eee1f291f00e148e0fe022822038d18210189
22a10900028d3fe112a1fd521638018bc2a08360017883603c88028f3ce127a8
09001638018b0ea846881e88028f2d8814a80900028f0f8815a8090001899fa1
83603dd10b4101e4836208422c3208428c32184209428c326591192283603fc9
036108410c31184134d33c3134d321211043fc8f0271fba9090032d1222100e1
31d210220c720ae33022047210222fd1a0e220212ed22fd1206008c8018f1041
fa8b2bd1106008c8238d13e26871212100e221210ae3312121212121212124d2
24d1206008c8018f1041fa8b20d1106008c81189687111621160116211621161
1ad220620fc918401c610b211ad257af12221ad1faaf090018d1f7af090018d0
0b4000e404a00b1f15d00b4001e40b1f06d10b41090006d10b4110e405d11262
67af291f9500ff7f1080018c0c06018c4c06018c0c00d8ffe405018c000000a5
00a000000880018c84705fa09c705fa018705fa0a08601000480018cffff0000
a007018caa9110381f8ff55ee82e1c8956d1a493322156d1ec31291f55d21222
55d112611821078d8360226253d11032038f01c8c2a00ae201c8018be1a00900
4fd150d2122236af017887911038b78fce71fd53fc5ee8331633268dfe5e4ad3
ec337d911633268d44e0fe000820278df65e3ed175933221291ffe5e42d2ec32
6e9116325e8d44e0fe0008205d8ff65ee82e5d8f48e0fe0008205c8fff5ee82e
278df85039d1b9afec3130d15a93322137d1b3af291f2dd155933221ddaf291f
e82e0e8d58e029d1fe000221291ffd52fc5ee832449116322dd19f8dfe5ecdaf
0900291fd6ae01e120d13d922221efaffd520820038df75e26d18faf0c31e82e
028925d18aafec31fa5ee82e028923d184afec31fb5ee82e038d40e020d17daf
ec3101e1fe021732038f40e01dd175af2c31fe000188028910d16faf09001ad1
6caf090019d169af090019d166af090018d163af090018d160af0900fa00e003
c8001f7c007cff03007e090010905fa00001d0ba4840018c1080018c0d600d60
0000400050805fa043c721fe0008d0ba0200d0ba0009d0ba000ad0ba000bd0ba
000dd0ba0007d0ba4d4d0d600300d0ba0400d0ba0500d0ba0600d0ba5bd11261
c971263112895ad112611821138959d11262a9911032028957d108a0090057d1
126118210a8956d101a0090055d156d2122221af836055d1f9af090054d1f6af
090054d11daf090029071ce61821028d6d472dab090050d050dc51d6f9aa0900
03c90388018969a83fe13fe11638028d83605aae836201c8018b99a8090049d1
019c230c090088ed47d222621071203102ee068fe71f45d11261503102ee048d
e71f0192230209000ce90191230109004ae93360038829071ce11d473cd038d1
36dcc6aa1366f48f182139d0ebaa09004121017002715630058f20c8d62f019d
230df66d42ebf38f2364f1af336401a093628362212101700271a630f78f0388
f78d46302c8f66302c8b312101705888f38f027127d12892222127d227d12921
27d33b2113662367e07726d518e352271043fc8f047724d30ce77223fc7310e7
722322d708e3722101771043fb8f047183061ed700e101e60195230508e304de
c8af5362c6af7362280680000c80018c0880018c0480018c030cd0ba0080018c
040cd0ba010cd0ba4840018c020cd0ba9d5a0d60000020000000484300006c43
0000803f000040001000a0ff1400a0ff000070431c815fa0e040018ce0ffff03
000000e0111111113c0000ffe0ffc00040000000640000000000000040010000
0e00000000000000100000000a00000000000000010004000000040003000400
01000c0001002400010004000100000002000000000100000002000003030000
00017f80ff000000000000000100000002000000ffffff7f0000008001000080
ffffffff78563412efbeadde000001005345474120534547414b4154414e4120
000000000000000017b7d1380000000000000000ffffffff0000204400000000
17b7d1380000803f00000000ffffffff000000000000f04317b7d13800000000
0000803fffffffff
""")
# The program built with -DLIVE_ATLAS (live_prog.c): with textures of every
# layout drawn texel for texel, a few bytes of each written every frame,
# for the texture cache's updates of parts of them (tools/vulkan/vk_parts.sh).
PROGRAM_ATLAS = bytes.fromhex("""
01df02d02b40090000f0008ce00e018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018c07d3326113620de77d421a222361294101412a21
136005e22d401a200b000223ac34018c862f962fa62fb62f224f0844084412d1
4c311267536201421151014123636c331633028f636a136a283aa82a0d8dfee1
19257c3509d85c3800e909db0b4b090001280179903af98f0278264ff66bf66a
f6690b00f66809002c34018c000000a46c06018c862f224f09d00b4043688364
0844084407d11c34415109410941294007011a00f4e11d40264f0b00f6680900
6c06018c2c34018cf47ff361319221214d6229444c602d93236739277b201181
2c60128100e013815d6229455c6029233b2014812c6015810fd101e220211871
a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f36209d706e1
256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa018705fa0
a086010080705fa027d100e220210c71602163621942047120210871a0e22021
22d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed3456221231041
fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d536400e0
14d70174180063610a3101416362017202e33232078d017105a001e119422404
1041098d027071622d62036301736233f48f2405f5af104107d110610b0001e0
0b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0862f962f
a62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba009e0fc84
0fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288608f01e0
f3620c7225840c63284326840c6118613b2127840c600b21b9931c33b8922633
018b9ea001e08828488d83605cd222621032018b97a002e00ee6f36559d457d0
0b400c750820018b8fa009e0f3600c700184118801898aa003e0f3600c700484
0188018985a003e0f3600c7005840288018980a003e0f3620c722b840c632843
2c840c6118613b212d840c622b217e922c317d922631018b6fa003e064e6f365
41d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce938d21222
48a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af6f801049
088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca00ae01c31
1042068dff736821f9891c314a21f7af1d611040068954622c6218422a217363
f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c6213631943
3032228ff3622b840c621c611032ffe00a600840707f264ff66bf66af6690b00
f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf0900e9af
09e0e7af04e0e5af04e0e3af04e0a8fd2b018000211009007c32018ca807018c
1480018c7032018c6432018c00800000ffff00000ad142210471522101e109d2
1222087212220472122207d1226001c8018d1041fa8b05d1126001c80b002900
04745fa00c745fa000093d0018745fa0626113671947014725922821ffe22a62
436300432903136001402444136019407a2001c8108943605c302a2306342907
3a2773611841236318433c333b21203729022b210b001226436058302a234630
2907eeaf3a27000249d1126249d11032048d00e248d122210b0000e047d148d2
122248d221521032718b47d112600188028d11e00b00090044d345d131110471
44d2292144d645d772166c921b222316726230325d8f00e341d23222736301e7
7223226360922033558b39d2215337d22033df8f13e03bd23bd331123bd334d7
33173bd773123bd226164e921b22271639d222623032cd8f16e038d22dd33922
43932b23371624d305e7722332d332672fd33037318b32d32fd7322729d77357
30372c8b22d3335728d33037b28f18e02cd778162a977b2119162bd101e33221
2ad1126321d11033a48f19e025d338167b22291624d102e2222124d1126220d1
10320e8f00e220d122210b0001e00b0011e00b0012e00b0013e00b0017e00b00
18e00b001ae01601c0003601340109000000001044332211100000ff88776655
040000100050018c4040018c5555aaaafc5f018c00f0ff1f0040018c00100010
4440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c000300010083000100070018c
c1c1c1c100400010000000ff08400010862f962ff45110d2222210d8422810d0
522010d4122410d5622510d6722610d7122710d3f25992238302f35992221228
00e11220122412251226122712238302f6690b00f6680900000000e0040000e0
080000e00c0000e0100000e0140000e0180000e01c0000e0862f962fa62fb62f
c62fd62fe62f224ff07f536b636a7369fd5e2ad11b24431f29dd422d00e829d1
822129d282220871822108728222087182210872822208718221830de21f611f
722f22dcfc575366a3650b4cb364e21ffc52211f922f2367b366a3650b4c9364
1bdee21fa11f922ffc57b366a3650b4cb364f351122d17d112d2122212d18221
0872822208718221087282220871822108728222830de21ffc51111f922f1367
b366a3650b4c9364107f264ff66ef66df66cf66bf66af6690b00f66800000081
000000e0040000e0080000e0700c018c0000803e00000024224ff87ff351111f
722f6367536643650cd10b4100e40cd200e112220bd312230473122304731223
047312230473122304731223047312238302087f264f0b0009000900d80c018c
000000e0040000e0862f962fa62fb62fc62fd62fe62ff75cf85bf95e24d14b21
24d2122224da25d1122a25d9522925d8622825d000e1122024d5122524d61226
24d312238302436d2b2dd222b22ae229c22812201225722612238302d222b22a
fb5bb229c22812201bdbb225722612238302d222fa5dd22ae229c228b2201225
72261223830215dddb244222fa54422afb5dd229c228b220b225722612238302
f66ef66df66cf66bf66af6690b00f66800000080000000e0040000e0000000c0
080000e00c0000e0100000e0140000e0180000e01c0000e00000803f000000f0
862f962fa62fb62fc62fd62fe62f224fbc7fc07f9bd112619bd2266526662267
9ad2266322625b216b217b213b212b214ce0160f96d11060fec90021ffe295d3
22230473222300e204732123106001cb002191d1126091d3392005cb02211871
8fd33221f471222110718ed222216c718dd222219c718dd2222104718cd22221
10718cd222218cd18cd212228cd212228cd18dd222218dd600e38dd88dd412e7
45330a02094223611c3113652c355c353369583953609c3008408e0112260173
1047ed8f047684d184d2222184d185d22221047184d22221047184d2222184d1
c59222210471c392222104711fe222210471be9222217fd27fd310e132221041
fc8f04727dd1b59222213c717cd222210871077222217bd27bd3ac9132221041
fc8f047279d17ad77ad310e27221a3961c3632261042f98f047177d177d22221
04719a92222176d276d310e132221041fc8f04721fe174d2122274d2122274d1
00e002ea00e973d807e41fe58697869317e6d62f019d230df66d26211043058d
017726657035f989f8af63616ad227536ad22033648d50e001e1160f10e168d2
12220472122267d267d30ce132221041fc8f047200e163d212220472122263d1
63d2222163d164d2222164d12e4164d1ffe700e308e2722131111042fb8f0871
5fd360d1122360d260d1292148977b2111135fd1122200e111125ed212225ed2
12225ed105e222215dd00b40090040e7fc3701175bd1eee2339320215ad71c37
20275ad71c37202759d71c3720271043f38f017157d458d00b4005e5082001ee
028de61fb4a0090054d00b40090054d454d10b41092454dcc36dc51fbea200ee
52d2205335d22033978996af01e1007ce003ff7f8001800000101f7ce00700f8
36010048846c5fa0f46c5fa0c0785fa00400d8ff0800d8ff44805fa000008000
3f7d1700000020000401150000007f020000df0177df27000000100020805fa0
28815fa08c805fa0000000030c0010a5f432018cabaaaaaa88805fa017b7d138
000010a500000002000080200000003004905fa0001000a40303030374805fa0
00ff000000825fa080800000002006a4050505050606060614905fa01ffc0000
000006a4070707071c985fa01c9c5fa0004006a4ffff0000c040018c11111111
380000ff000018a500000080180018a54c0e00a02c805fa000001800a800018c
0040018c000000100050018c00f0ff1f443322114040018c000000ff100000ff
e80a018c000023ac0000ffff0000feff0000fdff5eb000002807018c6600018c
ff7fffff6c00018cbc32018c0041018cbd9562d462d00b4009000820028fe61f
42af09005fd460d00b4005e50820018ba3a002ee5dd8ab9b59da5dd9b3650b4a
83640820018b9aa002eea1900c389038f58fb36553d454d00b4008e50820018b
8fa003ee959553d44dd00b4009000820028f10e187a003ee4fd650d220677c67
64633c633037028d10417ea004eef58f01724bd17b9210677c674ad31c333063
3c633037028d1042a8a005eef38f017145d16c9210677c6744d31c3330633c63
3037028d10429ba006eef38f017135d435d00b4002e50820018b93a008ee3cd1
3cd2222104715592222101e13ad21222087212220472122238d1226001c8018d
1041fa8b36d1126001c8028ffc717ba009ee00e222210471126001c8018975a0
0aee30d1379202a009000c8d017110677c672dd31c3330633c633037f58d1042
0beeb1aee61f29d110611c61249220315e8f0cee26d110611c6120315a8f07ee
24d110611c612031568b23d110611c612031538b00ee97aee61f95aee61f93ae
e61f91aee61f8faee61f8daee61f00280004004000180010ee0009000000200c
540a018c5eb000002807018c0000210c0028210c0000220ce432018c000020ac
000021ac0000ffff000022ac0000feff04745fa00000230c0c745fa0801a0600
18745fa0000023ac0000fdff001023ac002820ac002821ac004022ac54aee61f
52aee61f50aee61f4eaee61f4caee61f4aaee61f48aee61f46aee61f44aee61f
017993600888038f936801a1017e936807e00d4846911928936001c90b2870e0
860fd26af553326bf3667076b3651ed70b47a364071ff36778778366b3651bd0
0b40a36440e2fc322e51f7501030318f70e02f5127922921fe022031028de82e
d2a001eecc8ff366860f7076a3650ed70b47a364036bf366787683650cd00b40
a36440e2fc322e51103b0189bea002ee2f51089339212c522031b28d017902ee
0aa0e51f00030103900a018c1000018c2c00018c01eee51f5ad10b4100e85ad0
0b400900036159d957db0b4b136aa230058f0361a030ffe22a381049f58b63e1
163801e140e0028f160f08a2090050d850d1122850d10b41090082624fd34bd1
326001c8018d1041fa8b4cd11261136001c9081f136001c8018912a202e044d1
126344d11033018b0da203e040d1126040d11032038dff88018906a201e03cd1
1260ff885e893bd222213dd13dd2222104713dd222210471629222213bd13cd2
2221147101e22221136230d1226001c8018d1041fa8b2ed112611c6113600688
01890ba204e02ad22260294019403088028d747204a204e022632ed220330189
00a205e022d223d3322225d22ad33222047225d33222047228d33222047228d3
3222047227d3322227d728d320e2322701731042fb8f04771cd21dd332221472
01e33222236311d2326001c8018d1042fa8b0fd22260ff88048922600c600788
0089181fa2a1090056afe51f54afe51ff5500470051fe3600a882989f7ae00e9
022009000c06018c3c06018c80841e0000e100ac785634128c05018c186c5fa0
00e000ac0000008000e1000c046c5fa000e0000c56657273220000800c010022
000000020000006414e000ac0000dec0047d73d1103d018910adc51f71d8836c
057cf36a547a70db84600c69ab80f3640b4b5f74036168e0982929022031028d
160f19a103eeab840c61c8909b201030028dc03812a103eee68b64d8836e147e
63dd64dc64db65da0b4d0900051f8669f36678769365f3640b4c747440e3fc33
3e52f361707110320189f9a004eef3617471a490fe0210320189f3a004ee3c52
f5512a219a21b9213f533a22a9222b211821028de038e7a004eed58b50d00b40
f36b036a4fd9936e187e4fdd6c7b4fdc96680b4d83640038028d02e0d6a005ee
0a2868e0860fb365f3640b4c68740038028d40e2cca006eefc322b51b031028d
e039c7a006eee38b41d1181241d1191241d93dd80b48936440dbf3640b4b6074
3fd40b4807eef3640b4b64740b489364f3643cd10b41687440e7fc377a527851
1032478fe51f36d11a17f3656c75f3642ed00b406874f36432d10b41687440e1
fc311a521951103208ee338fe51f2ed00b4009ee01882d8fe51f2cd00b400aee
0188278fe51f2ad483600b400bee20d428d00b40090028d110301b8fe51f27d4
24d00b4009000188148fe51f24d140e0fc30181000e11a10f3656875f36421d1
0b41607440e3fc333a52385110320cee028de51f40ae0900a36435a083608000
e432018cb432018c4800018ca032018c6600018c5000018cf2830070f3830070
8400018c8832018c7200018c7a00018c0000803f00000040010004008005018c
010024008605018c8a00018c9800018c01000c006805018c000080bf01000080
785634127605018c0b40090044d800e1122844d10b41090082627f9110320dee
088fe51ff36440d00b4068740788138f00eee51ff0ad0900eeade51fecade51f
eaade51fe8ade51fe6ade51fe4ade51fe2ade51fe0ade51f0eeeddade51f33d9
926833d10b41090064e1122931d120e22221136230d1226020c8018f1041fa8b
2ed00b40090029d182212ad120e2222103619c7102e2263129011c3140e0d6ad
160f03a0081f01a0081f081f24d1126424d125d22363136600e020e733652835
40755026017600231047f78f01731cd31ed77223dc7300e772231dd712270477
2227047710e662271997722323651075136000eee71f01e808a010e3d6af081f
d4af081fd2af081f1043238924666c6604677c677036f789f6af871f80011154
4440018c2c05018c4005018cc8805fa00c06018c00695fa080841e003c06018c
4000a0ff9040018c7040018c018200001000a0ff6ed220622822038901922302
09006c166bd2226210711032228df75ee82e018f03eee71f67d268d112220171
111267d100e332213111321133113411351164d732275fd32223136504731223
047304e66223a893322710715bd004e813a004e35cd112615031d98ff75e5bd1
12611821d48ff75e56d1126002c8d38fe82eceaf090010430789f75ee82efa8f
56660036f789f6af871f4dd334533823048ff75e47d3326330322589e82e2a8d
05ee00e247d122212471422148d149d33b2149d3222349d249d7222732632033
1b8d00e244d3222341d3222345d222213263203301ee248fea1f126241d11032
1b8ff3611fa0787137d222621032d58ff75ed7af00e2d4afe71f726337d22033
ffe22a622a1f00e233d3222330d3222334d2222132632033df89fa5eeb610271
1a1ff3617871399221213890118158e012810fe0138133901481329015812ad1
00e220211871a0e2202128d228d1206008c8018f1041fa8b24d1106008c81a8d
09eef362787223d306e1256771231041fb8b21d10fe2222120d1139222210471
f072222100e11ed30d940d950d961dd80c994aa000e2ecafe61f314420010002
000383001f0fff0077772c01a10f09008040018c1000a0ff6840018c0100feca
5040018c1c00a0ff1400a0ff1800a0ff4c40018c000000e0000014a50df0ad0b
000014e52143341284705fa018705fa0a086010080705fa0002870a0402070a0
000081a04b1714060a071360783001400c37f5e00d4797071a0013670837d59e
ec3771230172027361714632ec8f85315123017202736032f78f617100e16cd2
1222047212220472c193322204721fe332220472bc9332220472122204721222
0472122263d1b4922221047160e2222161d100e0ae9500e6ad97ad935fd25630
d62f019d230df66d3614612101707030f58f027100e15ad21222047212220472
9993322204721fe3322204729093322204721222047212220472122204728c93
3222047248e3322288924ed32223047322230473222304732223047322234ad2
12220472122249d17992222148d600e7769048d47598759373620922236106e5
5d412c311c312c3145310a021365283501455c321942094287021a022831629e
ec31112601771043e68f027600e13ad212220472122204724d93322204721fe3
322204724493322204724d933222047212220472122231d13b922221047160e2
2221d87141922221f65007e11d401fcb40e2fc32061200eeeb1fef1fee1fffee
ed1f00eee91f9ea700e8188d5a884d8f648823d12a922221019d230d836db012
20d10b4102e462a009001ed10b4103e45da009001bd10b4104e458a009001ad1
15922221019d230d836d841230f800011f3c1f0fff07001070170f0f00190242
ff0fcf07011019fc00780342e003e07f040070a0240070a0000082a090e80000
840070a0ac0070a0c00070a0800070a0000083a06b6f4606040170a0240170a0
1c985fa0e405018c10905fa00289819110380c8b41d142d2222183606488c18b
40d178922221019d230d836d0212739110380389019023008360da1137d13ad2
2221019d230d836de6111638f98937d137d2222137d1ffe2222137d10b410900
36d110600fc90688018bdda6090034d1126118211e8933d1126118211a8f0820
028d09e141a701e240eefc3e1e1e1f1e2dd1126004e700e600e5f3640b407874
ee511821028d01e228d1222128d2226101711222bda68360b156014600e50b4a
936414a001790b4c93640b4e0c1f0c660176fc550b4a93640b4c93640b4e0c1f
07c903660176fc550b4a93640179936008882f8d107bd82dde8d48e0fe001f88
e18b0b4c93640365b15609460b4a9364edaf0179c8001f7ca0000900000070a0
01c200001c9c5fa00182000044815fa00000008014805fa08c05018c8c705fa0
1080018c0880018cbc00008c0080018c0c80018c8cd10ae22221836001c8018b
b1a1090089d18adc122c8ad1126eec1f89dee26240e0fc302210c263351001e2
222120e1122e85d1122c85d185d4122485d5122585d786d6722686d1141f131f
00e9921f911f84d0022f84dde59700e683d50b4d00e483dbb41fb31f921f911f
81d1122f81d700e67dd50b4d00e480da922a80d1922180d2922280d3922380d4
922480d5922580d6922680d79227830affe17fd0122010e1122e7ed1122c7ed1
68d2122268d3122368d569d45224b41fb31f921f911f68d6622f78d700e668d5
0b4d00e4922a6bd792276bde922e6bd092206bd192216bd292226bd392236bd4
9224830affe66ad562256dd112611821018b3ba101e26bd1126177e22631028f
01715aa1090067d2122267d112600820018b5ca1090009e11630018b9fa10a88
017061d1022143d1fc5ee221047148e0fe000221147154e0fe02222108715bd2
222104715ad222215ad111600d605ad111611f88028f1d6198a1090057d658d2
40e1236740e361271043fc8f027755951041f68f5c3252911638290251d1088f
222130d150d222214a911038018b4fd110612fd12dd222214ad1126118210189
86a1ffe72ede4adcc41f2ad1131f49dbb21f49ddd11f28daa22f28d9ffe700e6
2f940b49e365c41f44d1131fb21f44d1111fa22f43d744d523940b4900e6c41f
42d1131fb21f42d1111fa22fffe741d618940b49e36540d1141f40d1131f40d1
121fd11fa22fffe700e63ed50b4900e43dd1141f3dd17ba0131f008000010301
0601800088000900e4805fa00000400060805fa048805fa04c805fa000007001
00007f0068805fa06c805fa00000008044815fa0000000430000003f080e018c
00008020000080429a99193fff0000ff000000e0040000e0080000e00c0000e0
100000e0140000e0180000e01c0000e014805fa00000740100003f0000ff00ff
2480018c2080018c1880018c00007f020000df01140a70a4c80a70a400f80000
804070a42880018c0000c700010071a00000dc4200008c420000004200003043
00001043ffffff800000908000009043000040430002003000005c420000c042
0000f0410000002000002f430000964381d1121f81d1111fa22fffe780d681d5
0b4908e480d181d2222181d281d332220472e222047200e3322204727ed66222
047262220472622204726222830100e07add7bdc136376db7ada7bd97bd400e2
7bd5cba004e17bd14dae09007ad122217ad2222c7ad17bd22221b41fb31f921f
911f71d1122f78d700e678d50b4d00e4922a67d29222e362922e047292220472
9222047292220472922204729222830a6fd1ffe22221a8ae09006ed111611d61
6dd77031f7896dd101e29eae22216cdaa26c6cd1cb21122a6bd110e222211471
6ad222216ad16bd21222047212225cd15cd222215dde68dbb41f68d1131f00e9
921f911f50d1122f65dd829700e6e3650b4d00e4b41fb31f921f911f61d1122f
61d700e6e3650b4d00e43fd1922140d292220472922204729222047292220472
92220472922204729222830148d1ffe22221c22a55d101e2222164ae0900fc8b
53d111600d60407111611f88078d1d6142d101e222214dd10be254ae2221499e
ec314cd00821f689f2af090042933c3148d44821068b39d112611821058946d6
5dae090044d65aae0900349657ae090042d1141f42d1131f42d1121f42d1111f
42d1122f00e629d535d10b4100e469ae090029071ceeed473b277223fc57722b
3bd76227922a22240c77222712dee2250877222783031041708d017002c8dc1f
0089cc1f01c833d6e38d038832d6e1af290700802004e0070000fa4200007a43
00000e0c24008020000000e020000080040000e0000000c00000803f00002f43
000043430c0000e00000003f100000e0180000e0000020002480018c00007801
44815fa000000080ff00ffff0000802014805fa0280a78a41ff800001c80018c
f4805fa0000001004c805fa000007c0100003f0068805fa00000804200000043
080e018c9a99193fff0000ff1880018c200a7ca4dfff000000f8000000004843
00809f4300007042000052436666663f080000e00000574300006b4385daa41f
85d1131f85d9921f85d1111f85dee22fffe785d685d586d00b4008e4a41f85d1
131f921f84d1111fe22fffe783d684d57fd10b4108e483da83d4422a83dd84d2
222d84db84d1122b84dc85d6622c00e984d3922384d5922584d7922784d09220
830ab22a83d1122d83d7722be22c92239225ffe2087322239220830ab22a122d
7ed3322be22cfc7592257dd1f87012200875222508709220830ab22a79d0022d
722be22cf8751225047592250475222504759225830a74d5522a022d322be22c
68d01220047012200470222004709220830a422a5ed4422d6cd4422b622c61d6
9226f870922061d492240c769226830ab22a67d6622d722be22cfc709220fc74
92240870222008749224830ab22a622d322be22c53d69226fc701220fc742224
0c769226830ab22a5ad6622d722be22c4cd712279220222408709220830a522a
622d322be22c122747d3122322249220830a51d2241f131f621f50d1111fe22f
ffe737d5559432de0b4e00e64cd1122a37d0022d32d1122b4ad1122c30d339d2
32222ed538d4522438d6922638d79227830a00e300e2c36b636affe9736421a0
04e5236740d141dc236641dddb2725dd722d26de022e27d0c2201ad7722b29dc
122c29d76227922a2224830d122d622e9220222b222c2227222a2224830d1045
6c8d017302e1336002c8028d3921ada401c801c8018961a403882ed01821d08f
13672adcd1af13662ad027d12adcccaf1366800000006b430000f04100005743
000020410000003f00c0003400208020080e018c00005c4200000c4200c00036
00008020000000e008000080040000e0000000c0080000e0002480200c0000e0
00c80088100000e0140000e0180000e01c0000e00000f0420000e04100005042
0000004300002043080000f00004802000002443000040430000604300008042
c8000080000200300000803f00005643c80000e00000484300006c43b3dab4d9
a36e307eb3ddb4dcb4dba66108410841dc31126209420142125613559351141f
9251131f9151121f9261111fb22fffe72b26cb25aad00b4008e4e03ae58f1079
a8da00e9922aa8dd922da8dc922ca8d19221a8d29222a8d39223a8d49224a8d5
9225830aa7d5a8dbb11fa8d1122fa8dea8d753660b4e00e4b11fa7d1122fa7d7
a7d6a8d50b4e00e4a7d1122a922d922c97d6922602e297d7222706e196d01220
96d3222396d41224830ab11f9dd5522f9ed79fd69fd5a0d40b4e0900922a922d
922c8bd692268bd792278bde922e8bd092208bd19221830a98d2241f98d1131f
98d3321f98d4411f98dee22f7cdb98d698d599d40b4bffe790d5541f97d1131f
90d6621f96d1111fe22f96d691d592d40b4bffe7922a922d922c75d7922775d0
922075d1922175d2922275d39223830a8dd4441f84d5531f8cd6621f8cd7711f
8cd0022f8cd78dd58dd40b4b00e686d1141f8cd2231f85d3321f8bd4411f8bd5
522f8bd785d586d40b4b00e6922a922d922c5fd692265fd792275fd092205fd1
92215fd29222830a82d183d2222183d1141f83d1131f83d1121f83d1111f83d1
122f83d700e683d50b4b00e45cd3341f81d1131f73d4421f80d1111fe22f80d7
80d581940b4b00e6922a922d922c48d5922548d6922648d7922748de922e48d0
9220830a78d179de79d77ad67ad57bd40b4e122f74d27ad77ad67bd57bd40b4e
222f47d3341f50d4431f5ed5521f58d6611f58d7722f58d758d559d40b4b00e6
3fdee41f57d0031f021f57d1111f57d2222f57d751d552d40b4b00e6922a922d
922c2bd392232bd492242bd592252bd692262bd79227830a65d1ffe222213491
10380189f9a9090062d263d1226001c8018d1041fa8b61d161d2222161d162d2
2221047161d22221047161d2222104713bd2222104715fd222215fd35fd220e1
222301721041fb8f04735dd15dd22221147101e2222113624fd1226001c8018d
1041fa8bcca9090080009600fc33018c3c33018c2c34018c000480203333733f
080e018c000000e0040000e0080000e00c0000e0100000e0140000e0180000e0
1c0000e00000a0420000403f0000c842d80c018c0000704300006f4300007443
0000524300005c43000000200000004300004443000080420000020000005c42
000068430000f041000048430000003f00c40030000090200800000400008d43
00007a4300c6003000002a430000024300000c439a99193fff00008000009094
00000002000034430000f0429a99993e0000ff8060815fa0000000800000d842
00008c420000be42000020423333333fffff00ff000080200000964300008043
ffffff80000090806666663fb80d018c0000d442000082420000c24200003442
00004d4300009143000039430000874314805fa0186c5fa080841e0000e100ac
7856341200e000ac2200008000e1000c0c0100220000006514e000ac0001dec0
046c5fa000e0000c63d222610171122283603c88028f4288a9a00900048ffb5e
e82e018ba8a009005cd10b4109005cd10b4110e45bd1126283639c73aa911633
028ff951c6a009002831fd5e163e008b1d1ffe5e123e00891e1fff5e1c3eef1f
291f00e150e0fe022822038d1821018924a10900028d3fe114a1fe521638018b
c2a08360017883603c88028f3ce171a809001638018b58a846881e88028f2d88
5ea80900028f0f885fa809000189a1a183603dd10b4101e4836208422c320842
8c32184209428c326591192283603fc9036108410c31184134d33c3134d32121
1043fc8f0271a8a8090032d1222100e131d210220c720ae33022047210222fd1
a0e220212ed22fd1206008c8018f1041fa8b2bd1106008c8238d13e268712121
00e221210ae3312121212121212124d224d1206008c8018f1041fa8b20d11060
08c811896871116211601162116211611ad220620fc918401c610b211ad257af
12221ad1faaf090018d1f7af090018d00b4000e404a00b1f15d00b4001e40b1f
06d10b41090006d10b4110e405d1126267af291f9500ff7f1080018c0c06018c
4c06018c0c00d8ffe405018c000000a500a000000880018c84705fa09c705fa0
18705fa0a08601000480018cffff00005c08018cac9110381f8ff55ee82e1c89
57d1a693322157d1ec31291f56d2122256d112611821078d8360226254d11032
038f01c8c4a00ae201c8018be3a0090050d151d2122236af017889911038b78f
ce71fe53fd5ee8331633288dff5e4bd3ec337f911633288d4ce0fe000820298d
f65e3fd177933221291fff5e43d2ec3270911632608d4ce0fe0008205f8ff65e
e82e5f8f50e0fe0008205e8f40e0fe011821288df850136339d1b7af3c3130d1
5a93322137d1b1af291f2dd155933221dbaf291fe82e0e8d58e029d1fe000221
291ffe52fd5ee832449116322dd19d8dff5ecbaf0900291fd4ae01e120d13d92
2221efaffe520820038df75e26d18daf0c31e82e028925d188afec31fa5ee82e
028923d182afec31fb5ee82e038d44e020d17bafec3101e1fe021732038f44e0
1dd173af2c31fe000188028910d16daf09001ad16aaf090019d167af090019d1
64af090018d161af090018d15eaf0900fa00e003c8001f7c007cff03007e0900
10905fa00001d0ba4840018c1080018c0d600d600000400050805fa043c721fe
0008d0ba0200d0ba0009d0ba000ad0ba000bd0ba000dd0ba0007d0ba4d4d0d60
0300d0ba0400d0ba0500d0ba0600d0ba60d11261c971263112895fd112611821
13895ed11262b291103202895cd108a009005cd1126118210a895bd101a00900
5ad15bd212221faf83605ad1f9af090059d1f6af090059d11baf090029071ce6
1821028d6d479fab090055d055dc56d66bab090003c903880389019123013fe1
2aee3fe11638018957ae8362836dc07d4edb00e983601fc940e1fc314cdc4dde
4dda0211d62f019d230df66daaee4bd222621071103202ee068fe71f48d11261
103502ee048de71f0192230209008ae9019123010900c8e93360038829071ce1
1d4740d038d137dc2fab1366f48f18213cd054ab09004121017002715630058f
20c8d62f019d230df66dc0ebf38f2364f1af336401a093628362212101700271
a630f78f0388f78d46302c8f66302c8b312101705888f38f02712bd128922221
2ad22bd129212bd33b2113662367e07729d518e352271043fc8f047727d30ce7
7223fc7310e7722325d708e3722101771043fb8f0471830621d700e101e60195
230508e37edec8af5362c6af73622806800009000c80018c0880018c0480018c
030cd0ba0080018c040cd0ba010cd0ba4840018c020cd0ba9d5a0d6000002000
0000484300006c430000803f2c34018cf406018c6c06018c9006018c1000a0ff
1400a0ff000070431c815fa0e040018ce0ffff03000000e0111111113c0000ff
e0ffc000400000006400000000000000400100000e0000000000000010000000
0a0000000000000001000400000004000300040001000c000100240001000400
010000000200000000010000000200000303000000017f80ff00000000000000
0100000002000000ffffff7f0000008001000080ffffffff78563412efbeadde
000001005345474120534547414b4154414e4120000000000000000017b7d138
0000000000000000ffffffff000020440000000017b7d1380000803f00000000
ffffffff000000000000f04317b7d138000000000000803fffffffff00000000
0000000000000043000000430000004300000000000040430000804200004043
0000000000008043000080420000004300008042000040430000a04200004043
00008042000080430000c0420000804300000000000090430000004200008043
0000004200009043000080420000804300008042000090430000c04200008043
0000c042000088430000e042000088430000c04200008c430000d04200008c43
0000c04200008e430000c84200008e430000c04200008f430000c44200000000
0100000002000000030000000400000005000000060000000700000007000000
0700000007000000070000000000180000000800000000103600000038021000
00000200000000082d0000002818120000480000000000482d000000986f1200
00a00000000000162b00000000a0140000280000000000442c00000000101300
0040000000000030240000000811140000800000000000182400000040501300
b0aa0000000000882400000091f44525
""")
# The program built with -DLIVE_DMA (live_prog.c): video memory written by
# PVR-DMA over two pictures rendered to textures, one half covered and one
# whole, and over a texture drawn with (tools/vulkan/vk_dma.sh).
PROGRAM_DMA = bytes.fromhex("""
01df02d02b40090000f0008c680e018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018c0ad10bd222210bd11b240bd1422104710ad22221
04715221047100e2222101e107d21222047212220b0009004000a0ff01820000
00000004007c5fa00000800c147c5fa0f47ff361319221214d6229444c602d93
236739277b2011812c60128100e013815d6229455c6029233b2014812c601581
0fd101e220211871a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c8
0989f36209d706e1256331271041fb8f01e00b000c7ffcaf00e0302000ff0900
84705fa018705fa0a086010080705fa027d100e220210c716021636219420471
20210871a0e2202122d223d1206008c8018f1041fa8b1fd1106008c8348d06e1
1ed3456221231041fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d
68261d8d536400e014d70174180063610a3101416362017202e33232078d0171
05a001e1194224041041098d027071622d62036301736233f48f2405f5af1041
07d110610b0001e00b0000e00b0000e084705fa018705fa0a086010080705fa0
9c705fa0862f962fa62fb62f224f907f43680ae6f36572d472d00b400c750820
018bbba009e0fc840fc903886c8f01e0f3600c7002840188668f01e0f3600c70
03840288608f01e0f3620c7225840c63284326840c6118613b2127840c600b21
b9931c33b8922633018b9ea001e08828488d83605cd222621032018b97a002e0
0ee6f36559d457d00b400c750820018b8fa009e0f3600c700184118801898aa0
03e0f3600c7004840188018985a003e0f3600c7005840288018980a003e0f362
0c722b840c6328432c840c6118613b212d840c622b217e922c317d922631018b
6fa003e064e6f36541d43ed00b400c750820688df365f36a107af36800eb6c94
14a00ce938d2122248a0090010420a8d0177346040c8f98d7b6043610c416f84
1b20f3af6f801049088d087ab0280178a36300e78366f076ebaf08e200e12dd6
4c940ca00ae01c311042068dff736821f9891c314a21f7af1d61104006895462
2c6218422a217363f1af7362f06001882b8bf36001840288298b1fd22a21f362
fa840c62136319433032228ff3622b840c621c611032ffe00a600840707f264f
f66bf66af6690b00f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf
0900ebaf0900e9af09e0e7af04e0e5af04e0e3af04e0a8fd2b01800021100900
0834018c3007018c1480018cfc33018cf033018c00800000ffff00000ad14221
0471522101e109d21222087212220472122207d1226001c8018d1041fa8b05d1
126001c80b00290004745fa00c745fa000093d0018745fa06261136719470147
25922821ffe22a62436300432903136001402444136019407a2001c810894360
5c302a23063429073a2773611841236318433c333b21203729022b210b001226
436058302a2346302907eeaf3a27000249d1126249d11032048d00e248d12221
0b0000e047d148d2122248d221521032718b47d112600188028d11e00b000900
44d345d13111047144d2292144d645d772166c921b222316726230325d8f00e3
41d23222736301e77223226360922033558b39d2215337d22033df8f13e03bd2
3bd331123bd334d733173bd773123bd226164e921b22271639d222623032cd8f
16e038d22dd3392243932b23371624d305e7722332d332672fd33037318b32d3
2fd7322729d7735730372c8b22d3335728d33037b28f18e02cd778162a977b21
19162bd101e332212ad1126321d11033a48f19e025d338167b22291624d102e2
222124d1126220d110320e8f00e220d122210b0001e00b0011e00b0012e00b00
13e00b0017e00b0018e00b001ae01601c0003601340109000000001044332211
100000ff88776655040000100050018c4040018c5555aaaafc5f018c00f0ff1f
0040018c001000104440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c000300010
083000100070018cc1c1c1c100400010000000ff08400010862f962ff45110d2
222210d8422810d0522010d4122410d5622510d6722610d7122710d3f2599223
8302f3599222122800e11220122412251226122712238302f6690b00f6680900
000000e0040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0
862f962fa62fb62fc62fd62fe62f224ff07f536b636a7369fd5e2ad11b24431f
29dd422d00e829d1822129d28222087182210872822208718221087282220871
8221830de21f611f722f22dcfc575366a3650b4cb364e21ffc52211f922f2367
b366a3650b4c93641bdee21fa11f922ffc57b366a3650b4cb364f351122d17d1
12d2122212d182210872822208718221087282220871822108728222830de21f
fc51111f922f1367b366a3650b4c9364107f264ff66ef66df66cf66bf66af669
0b00f66800000081000000e0040000e0080000e0f80b018c0000803e00000024
224ff87ff351111f722f6367536643650cd10b4100e40cd200e112220bd31223
0473122304731223047312230473122304731223047312238302087f264f0b00
09000900600c018c000000e0040000e0862f962fa62fb62fc62fd62fe62ff75c
f85bf95e24d14b2124d2122224da25d1122a25d9522925d8622825d000e11220
24d5122524d6122624d312238302436d2b2dd222b22ae229c228122012257226
12238302d222b22afb5bb229c22812201bdbb225722612238302d222fa5dd22a
e229c228b220122572261223830215dddb244222fa54422afb5dd229c228b220
b225722612238302f66ef66df66cf66bf66af6690b00f66800000080000000e0
040000e0000000c0080000e00c0000e0100000e0140000e0180000e01c0000e0
0000803f000000f0862f962fa62fb62fc62fd62fe62f224fbc7fbc7f9bd11261
9bd22665266622679ad2266322625b216b217b213b212b2148e0160f96d11060
fec90021ffe295d322230473222300e204732123106001cb002191d1126091d3
392005cb022118718fd33221f471222110718ed222216c718dd222219c718dd2
222104718cd2222110718cd222218cd18cd212228cd212228cd18dd222218dd6
00e38dd88dd412e745330a02094223611c3113652c355c353369583953609c30
08408e01122601731047ed8f047684d184d2222184d185d22221047184d22221
047184d2222184d1c59222210471c392222104711fe222210471be9222217fd2
7fd310e132221041fc8f04727dd1b59222213c717cd222210871077222217bd2
7bd3ac9132221041fc8f047279d17ad77ad310e27221a3961c3632261042f98f
047177d177d2222104719a92222176d276d310e132221041fc8f04721fe174d2
122274d2122274d100e002ea00e973d807e41fe58697869317e6d62f019d230d
f66d82231043058d017726657035f989f8af63616ad227536ad22033648d4ce0
01e1160f10e168d212220472122267d267d30ce132221041fc8f047200e163d2
12220472122263d163d2222163d164d2222164d12e4164d1ffe700e308e27221
31111042fb8f08715fd360d1122360d260d1292148977b2111135fd1122200e1
11125ed212225ed212225ed105e222215dd00b40090040e7fc3701175bd1eee2
339320215ad71c3720275ad71c37202759d71c3720271043f38f017157d458d0
0b4005e5082001ed028dd71fb4a0090054d00b40090054d454d10b41092454dc
c36dc51fc0a200ee52d2205335d22033978996af01e1007ce003ff7f80018000
00101f7ce00700f836010048846c5fa0f46c5fa0c0785fa00400d8ff0800d8ff
44805fa0000080003f7d1700000020000401150000007f020000df0177df2700
0000100020805fa028815fa08c805fa0000000030c0010a58034018cabaaaaaa
88805fa017b7d138000010a500000002000080200000003004905fa0001000a4
0303030374805fa000ff000000825fa080800000002006a40505050506060606
14905fa01ffc0000000006a4070707071c985fa01c9c5fa0004006a4ffff0000
c040018c11111111380000ff000018a500000080180018a54c0e00a02c805fa0
00001800a800018c0040018c000000100050018c00f0ff1f443322114040018c
000000ff100000ff700a018c000023ac0000ffff0000feff0000fdff5eb00000
b006018c6600018cff7fffff6c00018c4834018c0041018cbd9562d462d00b40
09000820028fd71f42af09005fd460d00b4005e50820018ba3a002ed5dd8ab9b
59da5dd9b3650b4a83640820018b9aa002eda1900c389038f58fb36553d454d0
0b4008e50820018b8fa003ed959553d44dd00b4009000820028f10e187a003ed
4fd650d220677c6764633c633037028d10417ea004edf58f01724bd17b921067
7c674ad31c3330633c633037028d1042a8a005edf38f017145d16c9210677c67
44d31c3330633c633037028d10429ba006edf38f017135d435d00b4002e50820
018b93a008ed3cd13cd2222104715592222101e13ad212220872122204721222
38d1226001c8018d1041fa8b36d1126001c8028ffc717ba009ed00e222210471
126001c8018975a00aed30d1379202a009000c8d017110677c672dd31c333063
3c633037f58d10420bedb1aed71f29d110611c61249220315e8f0ced26d11061
1c6120315a8f07ed24d110611c612031568b23d110611c612031538b00ed97ae
d71f95aed71f93aed71f91aed71f8faed71f8daed71f00280004004000180010
ee0009000000200cdc09018c5eb00000b006018c0000210c0028210c0000220c
7034018c000020ac000021ac0000ffff000022ac0000feff04745fa00000230c
0c745fa0801a060018745fa0000023ac0000fdff001023ac002820ac002821ac
004022ac54aed71f52aed71f50aed71f4eaed71f4caed71f4aaed71f48aed71f
46aed71f44aed71f017993600888038f936803a1017e936807e00d4847911928
936001c90b2874e0860fd26af553326bf3667476b3651fd70b47a364061ff367
7c778366b3651cd00b40a3647ce0fe01f6501030348b2b90fe012a93392174e0
fe022031028de82ed4a001edcc8ff366860f7476a3650fd70b47a364036bf366
7c7683650dd00b40a36440e2fc322f51103b0189c0a002ed0a90fe0109944921
2d522031b18d017902ed0ba0d61f000380000103180a018c1000018c2c00018c
01edd61f5ad10b4100e85ad00b400900036159d957db0b4b136aa230058f0361
a030ffe22a381049f58b63e1163801e140e0028f160f09a2090050d850d11228
50d10b41090082624fd34bd1326001c8018d1041fa8b4cd11261136001c9091f
136001c8018913a202e044d1126344d11033018b0ea203e040d1126040d11032
038dff88018907a201e03cd11260ff885e893bd222213dd13dd2222104713dd2
22210471629222213bd13cd22221147101e22221136230d1226001c8018d1041
fa8b2ed112611c611360068801890ca204e02ad22260294019403088028d7472
05a204e022632ed22033018901a205e022d223d3322225d22ad33222047225d3
3222047228d33222047228d33222047227d3322227d728d320e2322701731042
fb8f04771cd21dd33222147201e33222236311d2326001c8018d1042fa8b0fd2
2260ff88048922600c6007880089191fa3a1090056afd61f54afd61ff5500470
051fe3600a882989f5ae00e9022009000c06018c3c06018c80841e0000e100ac
785634128c05018c186c5fa000e000ac0000008000e1000c046c5fa000e0000c
56657273220000800c010022000000020000006414e000ac0000dec0047d73d1
103d01890eadc51f71d8836c057cf36a587a70db84600c69ab80f3640b4b6374
03616ce0982929022031028d160f1aa103edab840c61c8909b201030028dc038
13a103ede68b64d8836e147e63dd64dc64db65da0b4d0900051f8669f3667c76
9365f3640b4c787440e3fc333f52f36174711032028d7ce5f9a004edf3617871
fc35525210320189f3a004ed3d52f5512a219a21b92151533a22a9222b211821
028de038e7a004edd48b50d00b40f36b036a4fd9936e187e4edd707b4edc9668
0b4d83640038028d02e7d6a005ed7a286ce0860fb365f3640b4c6c740038028d
40e2cca006edfc322c51b031028de039c7a006ede38b41d1191241d11a1241d9
3cd80b48936440dbf3640b4b64743fd40b4807edf3640b4b68740b489364f364
3bd10b416c7440e7fc377b5279511032478fd61f35d11b17f3657075f3642ed0
0b406c74f36432d10b416c7440e1fc311b521a51103208ed338fd61f2dd00b40
09ed01882d8fd61f2bd00b400aed0188278fd61f29d483600b400bed1fd428d0
0b40090027d110301b8fd61f26d424d00b4009000188148fd61f24d140e0fc30
191000e11b10f3656c75f36420d10b41647440e3fc333b52395110320ced028d
d61f3fae090035a0a36480007034018c4034018c4800018c2c34018c6600018c
5000018cf2830070f38300708400018c1434018c7200018c7a00018c0000803f
00000040010004008005018c010024008605018c8a00018c9800018c01000c00
6805018c000080bf01000080785634127605018c83600b40090045d800e11228
44d10b41090082627f9110320ded088fd61ff36440d00b406c740788138f00ed
d61fefad0900edadd61febadd61fe9add61fe7add61fe5add61fe3add61fe1ad
d61fdfadd61f0eeddcadd61f33d9926833d10b41090064e1122932d120e22221
136231d1226020c8018f1041fa8b2fd00b40090029d182212ad120e222210361
9c7102e2263129011c3140e0d5ad160f03a0091f01a0091f091f25d1126425d1
25d22363136600e020e73365283540755026017600231047f78f01731cd31fd7
7223dc7300e772231dd7122704772227047710e6622719977223236510751360
00edd81f01e808a010e3d6af091fd4af091fd2af091f1043248924666c660467
7c677036f789f6af881f8001115409004440018c2c05018c4005018cc8805fa0
0c06018c00695fa080841e003c06018c4000a0ff9040018c7040018c01820000
1000a0ff6ed220622822038901922302090056186bd2226210711032228df85d
d82d018f03edd81f67d268d112220171111267d100e332213111321133113411
351164d732275fd32223136504731223047304e66223a893322710715bd004e8
13a004e35cd112615031d98ff85d5bd112611821d48ff85d56d1126002c8d38f
d82dceaf090010430789f85dd82dfa8f56660036f789f6af881f4dd334533823
048ff85d47d3326330322589d82d2a8d05ed00e247d122212471422148d149d3
3b2149d3222349d249d72227326320331b8d00e244d3222341d3222345d22221
3263203301ed248fdb1f126241d110321b8ff3611fa07c7137d222621032d58f
f85dd7af00e2d4afd81f726337d22033ffe22a622b1f00e233d3222330d32223
34d2222132632033df89fb5ddb6102711b1ff3617c71399221213890118158e0
12810fe0138133901481329015812ad100e220211871a0e2202128d228d12060
08c8018f1041fa8b24d1106008c81a8d09edf3627c7223d306e1256771231041
fb8b21d10fe2222120d1139222210471f072222100e11ed30d940d950d961dd8
0c994aa000e2ecafd71f314420010002000383001f0fff0077772c01a10f0900
8040018c1000a0ff6840018c0100feca5040018c1c00a0ff1400a0ff1800a0ff
4c40018c000000e0000014a50df0ad0b000014e52143341284705fa018705fa0
a086010080705fa0002870a0402070a0000081a04b1714060a07136078300140
0c37f5e00d4797071a0013670837cd9ddc3771230172027361714632ec8f8531
5123017202736032f78f617100e168d21222047212220472b993322204721fe3
32220472b49332220472122204721222047212225fd1ac922221047160e22221
5dd100e0a69500e6a597a5935bd25630d62f019d230df66d2016612101707030
f58f027100e156d212220472122204729193322204721fe33222047288933222
047212220472122204721222047284933222047248e3322280924ad322230473
222304732223047322230473222346d212220472122245d17192222144d600e7
6e9044d46d986d9373620922236106e55d412c311c312c3145310a0213652835
01455c321942094287021a0228315a9ddc31112601771043e68f027600e136d2
12220472122204724593322204721fe3322204723c9332220472459332220472
1222047212222dd133922221047160e22221d87139922221f75007e11d401fcb
40e2fc32071200eddc1fdf1fde1fffeddd1f00edda1f00e028a6051f4688438d
5a88468b1ed12192222139a6f5501dd10b4102e434a6f5501ad10b4103e42fa6
f55018d10b4104e42aa6f55030f800011f3c1f0fff07001070170f0f00190242
ff0fcf07011019fc00780342e0030900040070a0240070a0000082a090e80000
840070a0ac0070a0c00070a0800070a0000083a06b6f4606040170a0240170a0
1c985fa0e405018c4fd193922221f7a5f550f550648802898d9110300a8b4bd1
4bd22221f5506488028b4ad184922221f2a5f55081911030038901902300f550
821342d144d22221e6a5f5504288138ff55042d27293729131221041fc8f0272
3fd86c953fd40b48090069953ed40b4809003ed1d5a509005088c88f40e137d2
5f9331221041fc8f02725b9538d434d10b410900edaf090008422c3208420c32
184209420c324e9119223fc9036108410c3118412fd33c312fd321211043fc8f
02710191230109002013f5501630038901912301090006139ea5f55023d1a0a5
090026d1222126d2222b26d126d22221a41fa31f821f811f24d1122f24d700e6
24d50b4e00e48229d362822d0472822204728222047282220472822204728222
047282228309ffe2222c42a609001ad752a60900e07fc8001f7ca000ff070010
0020e0078000ff7f10905fa0000070a001c200001c9c5fa001820000000080ac
6c06018c00007e0000407e000000200000807e00000000a500a000002480018c
0000780144815fa0000000800000003fff00ffff00008020ff0000ff69d12221
69d16ad712276ade6addd22e936a941f931f00e9921f911f67d0022f67ddbc97
00e6b3650b4d00e465d8922865dc922c65db922b65d1922165d2922265d39223
65d4922465d592258308ffe764d6722664d156d0122057d1122ea41fa31f921f
911f55d2222f60d700e660d50b4d00e49228922c922b55d3922355d4922455d5
922555d6922655d792278308ffe054dd022d0ea6090056d9926b56d1bb211229
55d110e22221147154d2222154d155d21222047212223ed13ed222214bdd52da
a41f52d1131f00e8821f811f3ad1122f3adc639700e6d3650b4c00e4a41fa31f
821f811f4ad1122f4ad700e6d3650b4c00e433d1822133d28222047282220472
822204728222047282220472822204728222830132d1ffe22221b2293ed101e2
2221d4a50900fc8b3cd111600d60407111611f88078d1d6139d101e2222136d1
0be2c4a522212a933c3136d44821f689f2af0900239ddc3132d00821068b30d1
12611821058930d6cea509002ed6cba509001596c8a509002cd1141f2cd1131f
2cd1121f2cd1111f2cd1122f00e617d50ad10b4100e4dba5090000ff00802004
e00709003080018c00007e0160805fa044815fa0000000800000003f900d018c
000000e0040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0
14805fa000407e010000ffff00008020f4805fa0000001004c805fa000007c01
00003f0068805fa000008042000000439a99193fff0000ff1880018c200a7ca4
1c80018cdfff000000f800000000484300809f4300007042000052436666663f
038829071ceddd473b27722340e7fc377457722a8dd76227822922240c772227
8bddd22508772227830310410c8d017002c840e6fc36c4160089b41601c8df8d
e36684d6ddaf038882d9941f82d1131f82d8821f82d1111f82ddd22fffe782d6
82d583d00b4008e4941f82d1131f821f81d1111fd22fffe780d681d57cd10b41
08e480d980d4422980dc81d2222c6fda80d1122a80db81d6622b81de00e8822e
80d3822380d5822580d782278309a2297fd1122c7fd7722ad22b822e8223ffe2
22257ad082208309a229122c7ad3322ad22b822e79d1fc751225fc7022200875
82258309a22976d0022c722ad22b122ef87582250475222504758225830971d5
5229022c322ad22b122e66d012200470222004708220830942295dd4422c6ad4
422a622b822e5fd68226fc7082205fd482248309a22965d6622c722ad22b822e
fc708220fc742224087082208309a229622c322ad22b822efc74122452d62226
82208309a2295ad6622c722ad22b122e82244dd72227822083095229622c322a
d22b122e122422278220830951d2241f131f621f50d1111fd22fffe738d55494
33dd0b4d00e64dd1122939d0022c34d1122a4bd1122b32d2222e30d439d34223
39d5822539d68226830900e300e2b36a24de5369ffe8636425a004e541d01cd1
41db04a01366236719d140db236640dccb2724dc722c25dd022d14d0b220e22a
27db122b27d7622782292224830c122c622d8220222a222b222722292224830c
1045678d017302e1336002c8028d392139a701c801c80189c7a6038829d01821
d18f136729dbd2af13668000080000e00000803f00006b430000f04100005743
000020410000003f00c0003400208020900d018c00005c4200000c4200c00036
00008020000000e008000080040000e0000000c0002480200c0000e000c80088
100000e0140000e0180000e01c0000e00000f0420000e0410000504200000043
00002043080000f00004802000002443000040430000604300008042c8000080
000200300000484300006c4300005643c80000e0bedbbfddd41fbfdaa31fbfdc
c21fbfdee11fbfd9922fbfd8ffe7bfd6b3650b4808e4d41fbdd1131fc21fbdd1
111f922fffe7bcd6b3650b4808e4bbd1141fa31fbad1121fe11f922fffe7b9d6
b9d50b4808e4b9d11261182101893ea1ffe7b7d900e88229b6dc822cb6db822b
b6de822eb6d18221b6d28222b6d38223b6d482248309b6d5b6daa11fb6d1122f
b6ddb7d753660b4d00e4a11fb5d1122fb5d7b6d6b6d50b4d00e4b6d11229822c
822b822e02e2a6d5222506e1a5d61226a5d72227a5d012208309a11facd1aed7
aed6afd5afd40b4d122f8229822c822b822e9bd282229bd382239bd482249bd5
82258309a8d6641fa8d1131fa8d7721fa8ddd11f83ddd22f83daa7d6a7d5a8d4
0b4affe7a0d0041fa6d1131fa0d1121f7bd1111fd22fa4d6a0d5a1d40b4affe7
8229822c822b822e85d2822285d3822385d4822485d5822583099cd6641f95d7
731f9bd0021f9bd1111f9bd2222f9bd79bd59cd40b4a00e694d3341f9ad4431f
93d5521f99d6611f99d7722f99d794d594d40b4a00e68229822c822b822e70d0
822070d1822170d2822270d38223830991d192d2222192d1141f60d1131f91d1
121f5fd1111f90d1122f90d700e65ed50b4a00e46dd4441f8dd1131f82d5521f
8cd1111fd22f8cd78cd58f940b4a00e68229822c822b822e59d6822659d78227
59dd822d59d08220830985d185dd86d786d687d587d40b4d122f81d286d787d6
87d588d40b4d222f58d3341f61d4431f6dd5521f67d6611f67d7722f67d768d5
68d40b4a00e651ddd41f67d0031f021f66d1111f66d2222f66d761d561d40b4a
00e68229822c822b822e3dd382233dd482243dd582253dd68226830972d1ffe2
22214491f550103001894da509006fd26fd1226001c8018d1041fa8b6dd16ed2
22216ed16ed2222104716ed2222104716dd2222104714bd2222104716bd22221
6bd36cd220e1222301721041fb8f047369d16ad22221147101e2222113625cd1
226001c8018d1041fa8b20a5090013d1141f0fd1131f12d1121f0ed1111f922f
5fd660d50b4808e4b3ae0900800096001b00802000000c4200008c430000a040
00007a430000003f900d018c00c00f0c00809d4300808e4300c80f0c00008c42
0000204200d00f0c000080202c80018c000000e0040000e0080000e00c0000e0
100000e0140000e0180000e01c0000e00000a0420000403f0000c842600c018c
0000704300006f43000074430000524300005c43000000200000004300004443
000080420000020000005c42000068430000f0410000484300c4003000009020
0800000400008d4300c6003000002a430000024300000c439a99193fff000080
0000909400000002000034430000f0429a99993e0000ff8060815fa000000080
0000d8420000be423333333fffff00ff0000964300008043ffffff8000009080
6666663f400d018c0000d442000082420000c2420000344200004d4300009143
000039430000874314805fa0186c5fa080841e0000e100ac7856341200e000ac
2200008000e1000c0c0100220000006514e000ac0001dec0046c5fa000e0000c
00020c0e220080206fd2226101711222f5503c88028ff55073a209004288048f
fc5dd82d018b05a3090068d10b41090067d10b4110e467d11262f5539c73c091
1633028ffa5103a3f5502831fd5d163d008b1d1ffe5d123d00891e1fff5d1c3d
df1f2a1f00e14ce0fe022822038d1821018963a30900028d3fe153a3fe52f550
1630018bffa201c80170051ff5503c88028f3ce1e5a909001630028f1e88cda9
f550028f2d88d2a90900028f0f88d3a909000189e5a3f55047d10b4101e4f550
03c90388028df5505faa3fe13fe11630018941aa0362f55001c8018b5eaa0900
3ed13fdb122b3fd1126340e2fc3234123dddd2644512b265561201e2222120e1
122d3ad1122b3ad13ad612263ad712273ad13bd012203bd1141f131f00e8821f
811f39d2222f39de4c9700e638d50b4e00e438daa41fa31f821f811f36d1122f
36d700e632d50b4e00e435d9822935d3822335d4822435d5822535d6822635d7
822735d0822035d18221830934dcffe2222c10e1122d33d1122b33d11dd31223
1dd412241dd61ed56225a41fa31f821f811f1dd7722f2dd700e61dd50b4e00e4
822920dd822d20d0822020d1822120d2822220d3822320d4822420d5822547a0
09009500008009001080018c0c06018c4c06018c0c00d8ffe405018c00004000
60805fa048805fa04c805fa00000700100007f0068805fa06c805fa000000080
44815fa0000000430000003f900d018c00008020000080429a99193fff0000ff
000000e0040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0
14805fa00000740100003f0000ff00ff8309ffe6622cb0d112611821018ba0a9
01e2aed1126177e22631028d0171abd21222abd102e22221aad1abd22221abd1
abd22221abd22261017112220ae22631018baca90900a8d7a8dba9d9941f931f
00e8821f811fa7d1122fa7da00e6b3650b4a00e4a5d1141f931f821f811fa4d1
122fa4d700e6b3650b4a00e4a2d18221a2d28222047282220472822204728222
04728222047282220472822283019cd1ffe222219bd112611821018baea901e2
99d111611d6199d22031028998d101e2222198d112600820018beca9090009e1
1630018b2faa0a88017092d1022192d150e0fe055221047154e0fe0662211471
58e0fe07722108718cd2222104718cd222218cd111600d608bd111611f88028f
1d6127aa090089d689d240e1236740e361271043fc8f0277c8931041f68f3c32
c591f5501630290282d1088f222182d182d22221bc911030018b81d1106163d1
63d222217bd112611821018914aaffe762deae9d7bdbb41f7bd1131f7bdaa21f
62dcc11f5fd9922f5fd8ffe700e6e3650b48d364b41f76d1131fa21f75d1111f
922f75d700e675d50b48d364b41f74d1131fa21f73d1111f922fffe772d68994
0b48e36571d1141f71d1131f71d1121fc11f922fffe700e66fd50b4800e46fd1
141f6fd1131f6fd1121f6fd1111f922fffe76ed66ed50b4808e447d16dd22221
46d26dd332220472e222047200e3322204726ad3322204723222047232220472
3222830100e05ddc65db66de13633bda65d934d865d400e265d529aa04e165d1
222100e164d210220c720ae330220472102262d1a0e2202161d262d1206008c8
018f1041fa8b5ed1106008c8238d13e26871212100e221210ae3312121212121
212157d257d1206008c8018f1041fa8b53d1106008c811896871116211601162
116211614dd220620fc918401c610b214dd28dad12224dd1faaf09004bd1f7af
09004bd00b4000e498a00c1f0001030106018000880009002480018c2080018c
e4805fa060805fa00000600144815fa0000000802c80018c0000ffff00008020
000080420000003f900d018c000000429a99193f00ff00ff000000e0040000e0
14805fa03080018c280a78a41ff800001c80018c1880018c48805fa000007f02
0000df01140a70a4c80a70a400f80000804070a42880018c68805fa00000c700
010071a00000dc420000004300008c420000304300001043ffffff8000009080
00009043000040430002003000005c420000c0420000f0410000002000002f43
000096430000fa4200007a4300000e0c2400802020000080000000c00000803f
00004343000057430c0000e0100000e0180000e00880018c84705fa09c705fa0
18705fa0a08601000480018cffff0000e407018c61d00b4001e40c1f60d10b41
090060d10b4110e45fd112620aad2a1fac9110301f8ff65dd82d1c895bd1a693
32215bd1dc312a1f5ad212225ad112611821078df550226258d11032038f01c8
cda00ae201c8018beca0090054d155d21222f9acf5508991f5501030d68fce71
fe53fd5dd8331633298dff5d4ed3dc337e911633298d48e0fe0008202a8df75d
42d1769332212a1fff5d47d2dc326f911632628d48e0fe000820618ff75dd82d
618f4ce0fe000820028d40e094a00900fe011821278d13633cd1b5af3c3133d1
589332213ad1afaf2a1f30d153933221daaf2a1fd82d0e8d5ce02cd1fe000221
2a1ffe52fd5dd8324291163230d19b8dff5dcaaf09002a1f95ac01e123d13b92
2221efaffe52f9500820038df85d29d18aaf0c31d82d028927d185afdc31fb5d
d82d028925d17fafdc31fc5dd82d038d44e023d178afdc3101e1fe021732038f
44e020d170af2c31fe000188028913d16aaf09001cd167af09001cd164af0900
1bd161af09001bd15eaf0900fa00e003c8001f7c007cff03007e0900e407018c
0c06018c4c06018c0c00d8ff10905fa00001d0ba4840018c1080018c0d600d60
0000400050805fa043c721fe0008d0ba0200d0ba0009d0ba000ad0ba000bd0ba
000dd0ba0007d0ba4d4d0d600300d0ba0400d0ba0500d0ba56d125af090056d1
1261c9712631128954d112611821138953d112629d911032028952d108a00900
51d1126118210a8950d101a0090050d150d2122216aff5504fd1f9af09004fd1
f6af09004ed112af090029071ce61821028d6d4702a909004ad04bdb4bd606a9
09000820048d1fe301902300f5507eec47d240e131221041fc8f027245d146d2
222146d1ffe2222145d10b41090045d110600fc90688018ba6ab090042d11261
18211f892dd1126118211b8f0820028d09e1d4ad01e27ce0160f7ce3fc331113
3ad1126004e700e600e50b4033647ce0fe011821028d01e223d122211ed22261
0171122285abf55031d222621071103202ed068fd81f2fd11261503102ed048d
d81f019223020900a0e7019123010900dee73360038829071ce11d4726d01bd1
19dba4a81366f48f182123d0c8a809004121017002715630058f20c8d62f019d
230df66dd6e9f38f2364f1af336436a0936228060600d0ba0c80018c0880018c
0480018c030cd0ba0080018c040cd0ba010cd0ba4840018c020cd0ba9d5a0d60
000020000000484300006c430000803f00807ea444815fa00000008014805fa0
8c05018c8c705fa01080018cbc00008c1000a0ff1400a0ff0000704383622121
01700271a630c28f0388f78d46302c8f66302c8b312101705888f38f027115d1
2792222114d215d1292115d33b2113662367e07713d518e352271043fc8f0477
11d30ce77223fc7310e772230fd708e3722101771043fb8f047183060bd700e1
01e60195230508e322dcc8af5362c6af736280001c815fa0e040018ce0ffff03
000000e0111111113c0000ffe0ffc00040000000640000000000000040010000
0e00000000000000100000000a00000000000000010004000000040003000400
01000c0001002400010004000100000002000000000100000002000003030000
00017f80ff000000000000000100000002000000ffffff7f0000008001000080
ffffffff78563412efbeadde000001005345474120534547414b4154414e4120
000000000000000017b7d1380000000000000000ffffffff0000204400000000
17b7d1380000803f00000000ffffffff000000000000f04317b7d13800000000
0000803fffffffff
""")
# The program built with -DLIVE_CLIP (live_prog.c): with three rectangles
# of one kind each drawn outside a clipping rectangle, the middle one's
# rectangle another, for a renderer that sets its programs' clipping only
# when it changes (tools/gl/gl_clip.sh).
PROGRAM_CLIP = bytes.fromhex("""
01df02d02b40090000f0008c100f018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018cf47ff361319221214d6229444c602d9323673927
7b2011812c60128100e013815d6229455c6029233b2014812c6015810fd101e2
20211871a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f362
09d706e1256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa0
18705fa0a086010080705fa027d100e220210c71602163621942047120210871
a0e2202122d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed34562
21231041fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d
536400e014d70174180063610a3101416362017202e33232078d017105a001e1
194224041041098d027071622d62036301736233f48f2405f5af104107d11061
0b0001e00b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0
862f962fa62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba0
09e0fc840fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288
608f01e0f3620c7225840c63284326840c6118613b2127840c600b21b9931c33
b8922633018b9ea001e08828488d83605cd222621032018b97a002e00ee6f365
59d457d00b400c750820018b8fa009e0f3600c700184118801898aa003e0f360
0c7004840188018985a003e0f3600c7005840288018980a003e0f3620c722b84
0c6328432c840c6118613b212d840c622b217e922c317d922631018b6fa003e0
64e6f36541d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce9
38d2122248a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af
6f801049088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca0
0ae01c311042068dff736821f9891c314a21f7af1d611040068954622c621842
2a217363f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c62
136319433032228ff3622b840c621c611032ffe00a600840707f264ff66bf66a
f6690b00f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf
0900e9af09e0e7af04e0e5af04e0e3af04e0a8fd2b018000211009008c32018c
ec06018c1480018c8032018c7432018c00800000ffff00000ad1422104715221
01e109d21222087212220472122207d1226001c8018d1041fa8b05d1126001c8
0b00290004745fa00c745fa000093d0018745fa0626113671947014725922821
ffe22a62436300432903136001402444136019407a2001c8108943605c302a23
063429073a2773611841236318433c333b21203729022b210b00122643605830
2a2346302907eeaf3a27000249d1126249d11032048d00e248d122210b0000e0
47d148d2122248d221521032718b47d112600188028d11e00b00090044d345d1
3111047144d2292144d645d772166c921b222316726230325d8f00e341d23222
736301e77223226360922033558b39d2215337d22033df8f13e03bd23bd33112
3bd334d733173bd773123bd226164e921b22271639d222623032cd8f16e038d2
2dd3392243932b23371624d305e7722332d332672fd33037318b32d32fd73227
29d7735730372c8b22d3335728d33037b28f18e02cd778162a977b2119162bd1
01e332212ad1126321d11033a48f19e025d338167b22291624d102e2222124d1
126220d110320e8f00e220d122210b0001e00b0011e00b0012e00b0013e00b00
17e00b0018e00b001ae01601c0003601340109000000001044332211100000ff
88776655040000100050018c4040018c5555aaaafc5f018c00f0ff1f0040018c
001000104440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c00030001008300010
0070018cc1c1c1c100400010000000ff08400010862f962ff45110d2222210d8
422810d0522010d4122410d5622510d6722610d7122710d3f25992238302f359
9222122800e11220122412251226122712238302f6690b00f6680900000000e0
040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0862f962f
a62fb62fc62fd62fe62f224ff07f536b636a7369fd5e2ad11b24431f29dd422d
00e829d1822129d282220871822108728222087182210872822208718221830d
e21f611f722f22dcfc575366a3650b4cb364e21ffc52211f922f2367b366a365
0b4c93641bdee21fa11f922ffc57b366a3650b4cb364f351122d17d112d21222
12d182210872822208718221087282220871822108728222830de21ffc51111f
922f1367b366a3650b4c9364107f264ff66ef66df66cf66bf66af6690b00f668
00000081000000e0040000e0080000e0b40b018c0000803e00000024224ff87f
f351111f722f6367536643650cd10b4100e40cd200e112220bd3122304731223
04731223047312230473122304731223047312238302087f264f0b0009000900
1c0c018c000000e0040000e0862f962fa62fb62fc62fd62fe62ff75af85ef95d
fa5cfb5b26d227d1122227d900e1122926d8122826d0122026d3422326d45224
26d5622526d67226830226d7722226d7722926d7722812201223122412251226
83022222e229d22821d7722012231224a225122683022222e229b22872201223
1224a225122683022222c229d228722012231224a2251226830216ddd222c229
b228722012231224a22512268302f66ef66df66cf66bf66af6690b00f6680900
000000e000000020040000e0080000e00c0000e0100000e0140000e0180000e0
1c0000e000000380000000c0000080200000003f000000f0862f962fa62fb62f
c62fd62fe62ff75cf85bf95e24d14b2124d2122224da25d1122a25d9522925d8
622825d000e1122024d5122524d6122624d312238302436d2b2dd222b22ae229
c22812201225722612238302d222b22afb5bb229c22812201bdbb22572261223
8302d222fa5dd22ae229c228b220122572261223830215dddb244222fa54422a
fb5dd229c228b220b225722612238302f66ef66df66cf66bf66af6690b00f668
00000080000000e0040000e0000000c0080000e00c0000e0100000e0140000e0
180000e01c0000e00000803f000000f0862f962fa62fb62fc62fd62fe62f224f
bc7fc07f9bd112619bd22665266622679ad2266322625b216b217b213b212b21
44e0160f96d11060fec90021ffe295d322230473222300e204732123106001cb
002191d1126091d3392005cb022118718fd33221f471222110718ed222216c71
8dd222219c718dd2222104718cd2222110718cd222218cd18cd212228cd21222
8cd18dd222218dd600e38dd88dd412e745330a02094223611c3113652c355c35
3369583953609c3008408e01122601731047ed8f047684d184d2222184d185d2
2221047184d22221047184d2222184d1c59222210471c392222104711fe22221
0471be9222217fd27fd310e132221041fc8f04727dd1b59222213c717cd22221
0871077222217bd27bd3ac9132221041fc8f047279d17ad77ad310e27221a396
1c3632261042f98f047177d177d2222104719a92222176d276d310e132221041
fc8f04721fe174d2122274d2122274d100e002ea00e973d807e41fe586978693
17e6d62f019d230df66d14211043058d017726657035f989f8af63616ad22753
6ad22033648d48e001e1160f10e168d212220472122267d267d30ce132221041
fc8f047200e163d212220472122263d163d2222163d164d2222164d12e4164d1
ffe700e308e2722131111042fb8f08715fd360d1122360d260d1292148977b21
11135fd1122200e111125ed212225ed212225ed105e222215dd00b40090040e7
fc3700175bd1eee2339320215ad71c3720275ad71c37202759d71c3720271043
f38f017157d458d00b4005e5082001ee028de61fb4a0090054d00b40090054d4
54d10b41092454dcc36dc51fbda200ee52d2205335d22033978996af01e1007c
e003ff7f8001800000101f7ce00700f836010048846c5fa0f46c5fa0c0785fa0
0400d8ff0800d8ff44805fa0000080003f7d1700000020000401150000007f02
0000df0177df27000000100020805fa028815fa08c805fa0000000030c0010a5
0433018cabaaaaaa88805fa017b7d138000010a5000000020000802000000030
04905fa0001000a40303030374805fa000ff000000825fa080800000002006a4
050505050606060614905fa01ffc0000000006a4070707071c985fa01c9c5fa0
004006a4ffff0000c040018c11111111380000ff000018a500000080180018a5
4c0e00a02c805fa000001800a800018c0040018c000000100050018c00f0ff1f
443322114040018c000000ff100000ff2c0a018c000023ac0000ffff0000feff
0000fdff5eb000006c06018c6600018cff7fffff6c00018ccc32018c0041018c
bd9562d462d00b4009000820028fe61f42af09005fd460d00b4005e50820018b
a3a002ee5dd8ab9b59da5dd9b3650b4a83640820018b9aa002eea1900c389038
f58fb36553d454d00b4008e50820018b8fa003ee959553d44dd00b4009000820
028f10e187a003ee4fd650d220677c6764633c633037028d10417ea004eef58f
01724bd17b9210677c674ad31c3330633c633037028d1042a8a005eef38f0171
45d16c9210677c6744d31c3330633c633037028d10429ba006eef38f017135d4
35d00b4002e50820018b93a008ee3cd13cd2222104715592222101e13ad21222
087212220472122238d1226001c8018d1041fa8b36d1126001c8028ffc717ba0
09ee00e222210471126001c8018975a00aee30d1379202a009000c8d01711067
7c672dd31c3330633c633037f58d10420beeb1aee61f29d110611c6124922031
5e8f0cee26d110611c6120315a8f07ee24d110611c612031568b23d110611c61
2031538b00ee97aee61f95aee61f93aee61f91aee61f8faee61f8daee61f0028
0004004000180010ee0009000000200c9809018c5eb000006c06018c0000210c
0028210c0000220cf432018c000020ac000021ac0000ffff000022ac0000feff
04745fa00000230c0c745fa0801a060018745fa0000023ac0000fdff001023ac
002820ac002821ac004022ac54aee61f52aee61f50aee61f4eaee61f4caee61f
4aaee61f48aee61f46aee61f44aee61f017993600888038f936800a1017e9368
07e00d4846911928936001c90b2870e0860fd26af553326bf3667076b3651ed7
0b47a364071ff36778778366b3651bd00b40a36440e2fc322e51f7501030318f
70e02f5127922921fe022031028de82ed1a001eecc8ff366860f7076a3650ed7
0b47a364036bf366787683650cd00b40a36440e2fc322e51103b0189bda002ee
2f51089339212c522031b28d017902ee0aa0e51f00030103d409018c1000018c
2c00018c01eee51f59d10b4100e859d00b400900036158d956db0b4b136aa230
058f0361a030ffe22a381049f58b63e1163801ee028fef1f07a209004fd850d1
122850d10b41090082624fd34ad1326001c8018d1041fa8b4bd11261136001c9
081f136001c8018910a202e043d1126343d11033018b0ba203e040d1126040d1
1032038dff88018904a201e03bd11260ff885e893ad222213cd13dd222210471
3cd222210471629222213bd13bd22221147101e2222113622fd1226001c8018d
1041fa8b2dd112611c6113600688018909a204e029d22260294019403088028d
747202a204e022632dd220330189fea105e022d222d3322224d22ad332220472
24d33222047228d33222047227d33222047227d3322227d727d320e232270173
1042fb8f04771cd21cd33222147201e33222236310d2326001c8018d1042fa8b
0ed22260ff88048922600c6007880089181fa0a1090057afe51f55afe51ff550
0470051fe3600a882889f8ae00e902200c06018c3c06018c80841e0000e100ac
785634128c05018c186c5fa000e000ac0000008000e1000c046c5fa000e0000c
56657273220000800c010022000000020000006414e000ac0000dec0047d73d1
103d018912adc51f71d8836c057cf36a547a70db84600c69ab80f3640b4b5f74
036168e0982929022031028d160f19a103eeab840c61c8909b201030028dc038
12a103eee68b64d8836e147e63dd64dc64db65da0b4d0900051f8669f3667876
9365f3640b4c747440e3fc333e52f361707110320189f9a004eef3617471a490
fe0210320189f3a004ee3c52f5512a219a21b9213f533a22a9222b211821028d
e038e7a004eed58b50d00b40f36b036a4fd9936e187e4fdd6c7b4fdc96680b4d
83640038028d02e0d6a005ee0a2868e0860fb365f3640b4c68740038028d40e2
cca006eefc322b51b031028d903ec7a006eee38b41d1181241d1191241d93dd8
0b48936440dbf3640b4b60743fd40b4807eef3640b4b64740b489364f3643cd1
0b41687440e7fc377a5278511032478fe51f36d11a17f3656c75f3642ed00b40
6874f36432d10b41687440e1fc311a521951103208ee338fe51f2ed00b4009ee
01882d8fe51f2cd00b400aee0188278fe51f2ad483600b400bee20d428d00b40
090028d110301b8fe51f27d424d00b4009000188148fe51f24d140e0fc301810
00e11a10f3656875f36421d10b41607440e3fc333a52385110320cee028de51f
42ae0900a36435a083608000f432018cc432018c4800018cb032018c6600018c
5000018cf2830070f38300708400018c9832018c7200018c7a00018c0000803f
00000040010004008005018c010024008605018c8a00018c9800018c01000c00
6805018c000080bf01000080785634127605018c0b40090044d800e1122844d1
0b41090082627e9110320dee088fe51ff36440d00b4068740788138f00eee51f
f2ad0900f0ade51feeade51fecade51feaade51fe8ade51fe6ade51fe4ade51f
e2ade51f0eeedfade51f33d9926833d10b41090064e1122931d120e222211362
30d1226020c8018f1041fa8b2ed00b40090029d182212ad120e2222103619c71
02e2263129011c31d8ad1f1f03a0081f01a0081f081f25d1126425d125d22363
136600e020e73365283540755026017600231047f78f01731cd31fd77223dc73
00e772231dd7122704772227047710e662271997722323651075136000eee71f
01e808a010e3d6af081fd4af081fd2af081f1043248924666c6604677c677036
f789f6af871f8001115409004440018c2c05018c4005018cc8805fa00c06018c
00695fa080841e003c06018c4000a0ff9040018c7040018c018200001000a0ff
6ed22062282203890192230209005e166bd2226210711032228df75ee82e018f
03eee71f67d268d112220171111267d100e332213111321133113411351164d7
32275fd32223136504731223047304e66223a893322710715bd004e813a004e3
5cd112615031d98ff75e5bd112611821d48ff75e56d1126002c8d38fe82eceaf
090010430789f75ee82efa8f56660036f789f6af871f4dd334533823048ff75e
47d3326330322589e82e2a8d05ee00e247d122212471422148d149d33b2149d3
222349d249d72227326320331b8d00e244d3222341d3222345d2222132632033
01ee248fea1f126241d110321b8ff3611fa0787137d222621032d58ff75ed7af
00e2d4afe71f726337d22033ffe22a622a1f00e233d3222330d3222334d22221
32632033df89fa5eeb6102711a1ff3617871399221213890118158e012810fe0
138133901481329015812ad100e220211871a0e2202128d228d1206008c8018f
1041fa8b24d1106008c81a8d09eef362787223d306e1256771231041fb8b21d1
0fe2222120d1139222210471f072222100e11ed30d940d950d961dd80c994aa0
00e2ecafe61f314420010002000383001f0fff0077772c01a10f09008040018c
1000a0ff6840018c0100feca5040018c1c00a0ff1400a0ff1800a0ff4c40018c
000000e0000014a50df0ad0b000014e52143341284705fa018705fa0a0860100
80705fa0002870a0402070a0000081a04b1714060a071360783001400c37f5e0
0d4797071a0013670837d59eec3771230172027361714632ec8f853151230172
02736032f78f617100e16cd21222047212220472c193322204721fe332220472
bc93322204721222047212220472122263d1b4922221047160e2222161d100e0
ae9500e6ad97ad935fd25630d62f019d230df66d2814612101707030f58f0271
00e15ad212220472122204729993322204721fe3322204729093322204721222
047212220472122204728c933222047248e3322288924ed32223047322230473
222304732223047322234ad212220472122249d17992222148d600e7769048d4
7598759373620922236106e55d412c311c312c3145310a021365283501455c32
1942094287021a022831629eec31112601771043e68f027600e13ad212220472
122204724d93322204721fe3322204724493322204724d933222047212220472
122231d13b922221047160e22221d87141922221f65007e11d401fcb40e2fc32
061200eeeb1fee1fed1fffeeec1f00eee91f4ea700e8188d5a884d8f648823d1
2a922221019023008360b01220d10b4102e4ffa109001ed10b4103e4faa10900
1bd10b4104e4f5a109001ad115922221019023008360841230f800011f3c1f0f
ff07001070170f0f00190242ff0fcf07011019fc00780342e003e07f040070a0
240070a0000082a090e80000840070a0ac0070a0c00070a0800070a0000083a0
6b6f4606040170a0240170a01c985fa0e405018c10905fa002890c911038138b
06d107d2222183606488178b05d10392222113a00900c8001f7c0900000070a0
01c200001c9c5fa0e79110380389019023008360d01173d173d2222173d174dc
122c74d1126340e2fc32331272dee2644412c265551201e2222120e1122e6fd1
122c6fd16fd612266fd712276fd170d0122070d1141f131f00e9921f911f6ed2
222f6eddba9700e66dd50b4d00e46ddbb41fb31f921f911f6bd1122f6bd700e6
67d50b4d00e46ada922a6ad392236ad492246ad592256ad692266ad792276ad0
92206ad19221830affe369d2322210e1122e68d1122c68d152d4122452d51225
52d753d67226b41fb31f921f911f52dee22f62d700e652d50b4d00e4922a55d0
922055d1922155d2922255d3922355d4922455d5922555d69226830affee54d7
e22757d112611821018b5ba101e255d1126177e22631028f01717aa1090051d2
122251d112600820018bd9a1090009e11630018b1ca20a8801704bd102212dd1
4ce0fe044221047150e0fe055221147154e0fe066221087144d22221047144d2
222144d111600d6043d111611f88028f1d6114a2090041d641d240e1236740e3
61271043fc8f027729901041f68f0c322691163829023bd1088f222119d13ad2
22211e911038018b38d1106118d117d2222134d112611821018902a2ffe718de
33dcc41f13d1131f32dbb21f32ddd11f11daa22f11d961a0ffe7a00000800001
03010601000070a0018200000000200060805fa048805fa04c805fa000007001
00007f0068805fa06c805fa00000008044815fa0000000430000003f380e018c
00008020000080429a99193fff0000ff000000e0040000e0080000e00c0000e0
100000e0140000e0180000e01c0000e014805fa00000740100003f0000ff00ff
2480018c2080018c1880018c00007f020000df01140a70a4c80a70a400f80000
804070a42880018c0000c700010071a00000dc4200008c420000004200e6c294
0b49e365c41f61d1131fb21f60d1111fa22f60d760d5b6940b4900e6c41f5fd1
131fb21f5ed1111fa22fffe75dd6ab940b49e3655cd1141f5cd1131f5cd1121f
d11fa22fffe700e65ad50b4900e45ad1141f5ad1131f5ad1121f5ad1111fa22f
ffe759d659d50b4908e459d159d2222159d25ad332220472e222047200e33222
047257d33222047232220472322204723222830100e048dd52dc13634edb52da
52d953d400e253d563a104e11638018b53a7836050d151d2222151d1ffe22221
50d10b41090050d110600fc90688018bf0a409004dd1126118211e894cd11261
18211a8f0820028d09e1b3a501e240eefc3e1e1e1f1e47d1126004e700e600e5
f3640b407874ee511821028d01e242d1222142d2226101711222d0a4836040d1
2dae09003fd122213fd2222c32d133d22221b41fb31f921f911f2cd1122f3bd7
00e63bd50b4d00e4922a23d29222047292220472922204729222047292220472
922204729222830a25d1ffe2222188ae090030d111611d612fd00031f7892fd1
01e27eae22218000880009000000304300001043ffffff800000908000009043
000040430002003000005c420000c0420000f0410000002000002f4300009643
0000fa4200007a4300000e0c24008020000000e020000080040000e0000000c0
0000803f000043430c0000e00000003f100000e0180000e044815fa000000080
14805fa08c05018c8c705fa01080018c0880018cbc00008c0080018c0c80018c
000020002480018c00007801ff00ffff00008020280a78a41ff800001c80018c
54daa26c54d1cb21122a54d110e22221147153d2222153d153d2122204721222
52d153d2222153de53dbb41f53d1131f00e9921f911f52d1122f52dd869700e6
e3650b4d00e4b41fb31f921f911f4ed1122f4ed700e6e3650b4d00e44cd19221
4cd29222047292220472922204729222047292220472922204729222830146d1
ffe22221c22a45d101e22221e7ad0900fc8b43d111600d60407111611f88078d
1d6140d101e222213cd10be2d7ad22214d922c313cd33821f689f2af09004697
7c3139dee821068b36d112611821058936d6e1ad090035d6dead09003896dbad
090033d1141f33d1131f33d1121f33d1111f33d1122f00e61ed522d10b4100e4
edad090029071ceeed473b27722340e7fc377357722b2bd76227922a22240c77
222729dee2250877222783031041518d017002c840e6fc36d3160089c31601c8
22d6df8d038822d6ddaf290700802004e0070900f4805fa0000001004c805fa0
00007c0100003f0068805fa044815fa000000080000080200000804200000043
0000003f380e018c9a99193fff0000ff000000e0040000e014805fa01880018c
200a7ca41c80018cdfff000000f800000000484300809f430000704200005243
6666663f080000e00000803f0000574300006b4385daa41f85d1131f85d9921f
85d1111f85dee22fffe785d685d586d00b4008e4a41f85d1131f921f84d1111f
e22fffe783d684d57fd10b4108e483da83d4422a83dd84d2222d84db84d1122b
84dc85d6622c00e984d3922384d5922584d7922784d09220830ab22a83d1122d
83d7722be22c92239225ffe2087322239220830ab22a122d7ed3322be22cfc75
92257dd1f87012200875222508709220830ab22a79d0022d722be22cf8751225
047592250475222504759225830a74d5522a022d322be22c68d0122004701220
0470222004709220830a422a5ed4422d6cd4422b622c61d69226f870922061d4
92240c769226830ab22a67d6622d722be22cfc709220fc749224087022200874
9224830ab22a622d322be22c53d69226fc701220fc7422240c769226830ab22a
5ad6622d722be22c4cd712279220222408709220830a522a622d322be22c1227
47d3122322249220830a51d2241f131f621f50d1111fe22fffe737d5559432de
0b4e00e64cd1122a37d0022d32d1122b4ad1122c30d339d232222ed538d45224
38d6922638d79227830a00e300e2c36b636affe9736421a004e5236740d141dc
236641dddb2725dd722d26de022e27d0c2201ad7722b29dc122c29d76227922a
2224830d122d622e9220222b222c2227222a2224830d10456c8d017302e13360
02c8028d3921d0a401c801c801898da403882ed01821d08f13672adcd1af1366
2ad027d12adcccaf1366800000006b430000f04100005743000020410000003f
00c0003400208020380e018c00005c4200000c4200c0003600008020000000e0
08000080040000e0000000c0080000e0002480200c0000e000c80088100000e0
140000e0180000e01c0000e00000f0420000e041000050420000004300002043
080000f00004802000002443000040430000604300008042c800008000020030
0000803f00005643c80000e00000484300006c437fdaa41f7fdcc31f7fdee21f
7fdbb11ff391122f7ed904e701e604e50b4901e4a41fe31fe21f7bd1111f7bd1
122f04e703e604e50b4903e4a41fc31fe21fb11f76d0022f04e701e604e50b49
01e4d36a00e9922d047d922d71dc922c71d1922171d2922271d3922371d49224
71d59225830a71d571dbb11f71d1122f71de72d753660b4e00e4b11f70d1122f
70d771d671d50b4e00e471d1122a922d922c61d6922602e260d7222706e160d0
122060d3222360d41224830ab11f67d5522f68d768d669d569d40b4e0900922a
922d922c54d6922654d7922754de922e54d0922054d19221830a62d2241f62d1
131f62d3321f62d4411f62dee22f62db62d663d563d40b4bffe75ad5541f62d1
131f5ad6621f61d1111fe22f60d65cd55cd40b4bffe7922a922d922c3ed79227
3ed092203ed192213ed292223ed39223830a58d4441f4ed5531f57d6621f57d7
711f57d0022f57d757d558d40b4b00e650d1141f56d2231f4fd3321f27d4411f
54d5522f54d750d550d40b4b00e6922a922d922c28d6922628d7922728d09220
28d1922128d29222830a4cd14cd222214cd1141f4cd1131f4cd1121f4cd1111f
4cd1122f1ad700e64bd50b4b00e426d3341f4ad1131f3ed4421f49d1111fe22f
48d749d514940b4b00e6922a922d922c11d5922511d6922611d7922711de922e
11d09220830a41d141de83a0122f00ff8000090000002843000090420000f042
0000c0414c0d018c0000b04200ff00ffffff00ff080000e00c0000e0100000e0
140000e0180000e01c0000e00000a0420000403f0000c8421c0c018c00007043
00006f43000074430000524300005c4300000020000000430000444300008042
0000020000005c42000068430000f041000048430000003f380e018c00c40030
000090200800000400008d4300007a4300c6003000002a430000024300000c43
9a99193fff0000800000909400000002000034439a99993e0000ff8060815fa0
000000800000d84200008c420000be42000020423333333f0000802000009643
00008043ffffff80000090806666663ffc0c018c71d772d672d573d40b4e0900
72d273d773d674d574d40b4e222f74d3341f74d4431f74d5521f74d6611f74d7
722f74d774d575d40b4b00e66cdee41f6dd0031f021f72d1111f72d2222f72d7
6dd56ed40b4b00e6922a922d922c6fd392236fd492246fd592256fd692266fd7
9227830a6ed1ffe22221a4911038018936ab09006bd26cd1226001c8018d1041
fa8b6ad16ad222216ad16bd2222104716ad2222104716ad22221047157d22221
047168d2222168d368d220e1222301721041fb8f047366d166d22221147101e2
2221136258d1226001c8018d1041fa8b09ab090060d222610171122283603c88
028f428808a10900048ffb5ee82e018b07a1090059d10b41090059d10b4110e4
58d1126283639c7356911633028ff95105a109002831fc5e163e008b1c1ffd5e
123e00891d1ffe5e1c3eee1f291f00e148e0fe022822038d1821018961a10900
028d3fe151a1fd521638018b01a18360017883603c88028f3ce1c1a809001638
018ba8a846881e88028f2d88aea80900028f0f88afa809000189f3a183603ad1
0b4101e4836208422c3208428c32184209428c321191192283603fc903610841
0c31184131d33c3131d321211043fc8f027195aa090096009500ff7f0000d442
000082420000c242000034426666663f00004d43000091430000394300008743
00005243000048430000344300000c439a99193fff0000800000909400000002
0000f0429a99993e0000ff800c0000e0100000e0140000e0180000e01c0000e0
14805fa0186c5fa080841e0000e100ac7856341200e000ac2200008000e1000c
0c0100220000006514e000ac0001dec0046c5fa000e0000c1080018c0c06018c
4c06018c0c00d8ffe405018c000000a500a0000083d1222100e183d210220c72
0ae330220472102280d1a0e2202180d280d1206008c8018f1041fa8b7cd11060
08c8238d13e26871212100e221210ae3312121212121212175d276d1206008c8
018f1041fa8b72d1106008c811896871116211601162116211616cd220620fc9
18401c610b216cd2f8ae12226bd1faaf09006ad1f7af090069d00b4000e404a0
0b1f67d00b4001e40b1f66d10b41090065d10b4110e465d1126208af291faa91
10381f8ff55ee82e1c8961d1a493322160d1ec31291f60d2122260d112611821
078d836022625ed11032038f01c8d7a00ae201c8018bf6a009005ad15ad21222
f7ae017887911038d78fce71fd53fc5ee8331633268dfe5e54d3ec337d911633
268d44e0fe000820278df65e48d175933221291ffe5e4dd2ec326e9116325e8d
44e0fe0008205d8ff65ee82e5d8f48e0fe0008205c8fff5ee82e278df85044d1
b9afec313ad15a93322142d1b3af291f37d155933221ddaf291fe82e0e8d58e0
33d1fe000221291ffd52fc5ee8324491163238d19f8dfe5ecdaf0900291f97ae
01e12bd13d922221efaffd520820038df75e31d18faf0c31e82e02892fd18aaf
ec31fa5ee82e02892dd184afec31fb5ee82e038d40e02bd17dafec3101e1fe02
1732038f40e028d175af2c31fe00018802891bd16faf090024d16caf090024d1
69af090023d166af090023d163af090022d160af0900fa00e003c8001f7c007c
ff03007e0880018c84705fa09c705fa018705fa0a08601000480018cffff0000
a007018c0c06018c4c06018c0c00d8ff10905fa00001d0ba4840018c1080018c
0d600d600000400050805fa043c721fe0008d0ba0200d0ba0009d0ba000ad0ba
000bd0ba000dd0ba0007d0ba4d4d0d600300d0ba0400d0ba0500d0ba0600d0ba
5bd11261c971263112895ad112611821138959d11262a9911032028957d108a0
090057d1126118210a8956d101a0090055d156d212220caf836055d1f9af0900
54d1f6af090054d108af090029071ce61821028d6d4773ab090050d050dc51d6
3fab090003c903880189afa83fe13fe11638028d836006ae836201c8018bdea8
090049d1019c230c090014ee47d222621071203102ee068fe71f45d112615031
02ee048de71f01922302090098e9019123010900d6e93360038829071ce11d47
3cd038d136dc0cab1366f48f182139d031ab09004121017002715630058f20c8
d62f019d230df66dceebf38f2364f1af336401a093628362212101700271a630
f78f0388f78d46302c8f66302c8b312101705888f38f027127d12892222127d2
27d1292127d33b2113662367e07726d518e352271043fc8f047724d30ce77223
fc7310e7722322d708e3722101771043fb8f047183061ed700e101e601952305
08e390dec8af5362c6af7362280680000c80018c0880018c0480018c030cd0ba
0080018c040cd0ba010cd0ba4840018c020cd0ba9d5a0d600000200000004843
00006c430000803f000040001000a0ff1400a0ff000070431c815fa0e040018c
e0ffff03000000e0111111113c0000ffe0ffc000400000006400000000000000
400100000e00000000000000100000000a000000000000000100040000000400
0300040001000c00010024000100040001000000020000000001000000020000
0303000000017f80ff000000000000000100000002000000ffffff7f00000080
01000080ffffffff78563412efbeadde000001005345474120534547414b4154
414e4120000000000000000017b7d1380000000000000000ffffffff00002044
0000000017b7d1380000803f00000000ffffffff000000000000f04317b7d138
000000000000803fffffffff
""")
# The program built with -DLIVE_KEEP (live_prog.c): with a picture
# rendered to a texture once, at the very end of a frame, and only ever
# drawn with after that, for a state saved while it is still on its way
# (tools/gl/gl_ahead.sh).
PROGRAM_KEEP = bytes.fromhex("""
01df02d02b40090000f0008c240e018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018cf47ff361319221214d6229444c602d9323673927
7b2011812c60128100e013815d6229455c6029233b2014812c6015810fd101e2
20211871a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f362
09d706e1256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa0
18705fa0a086010080705fa027d100e220210c71602163621942047120210871
a0e2202122d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed34562
21231041fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d
536400e014d70174180063610a3101416362017202e33232078d017105a001e1
194224041041098d027071622d62036301736233f48f2405f5af104107d11061
0b0001e00b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0
862f962fa62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba0
09e0fc840fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288
608f01e0f3620c7225840c63284326840c6118613b2127840c600b21b9931c33
b8922633018b9ea001e08828488d83605cd222621032018b97a002e00ee6f365
59d457d00b400c750820018b8fa009e0f3600c700184118801898aa003e0f360
0c7004840188018985a003e0f3600c7005840288018980a003e0f3620c722b84
0c6328432c840c6118613b212d840c622b217e922c317d922631018b6fa003e0
64e6f36541d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce9
38d2122248a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af
6f801049088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca0
0ae01c311042068dff736821f9891c314a21f7af1d611040068954622c621842
2a217363f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c62
136319433032228ff3622b840c621c611032ffe00a600840707f264ff66bf66a
f6690b00f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf
0900e9af09e0e7af04e0e5af04e0e3af04e0a8fd2b018000211009001832018c
ec06018c1480018c0c32018c0032018c00800000ffff00000ad1422104715221
01e109d21222087212220472122207d1226001c8018d1041fa8b05d1126001c8
0b00290004745fa00c745fa000093d0018745fa0626113671947014725922821
ffe22a62436300432903136001402444136019407a2001c8108943605c302a23
063429073a2773611841236318433c333b21203729022b210b00122643605830
2a2346302907eeaf3a27000249d1126249d11032048d00e248d122210b0000e0
47d148d2122248d221521032718b47d112600188028d11e00b00090044d345d1
3111047144d2292144d645d772166c921b222316726230325d8f00e341d23222
736301e77223226360922033558b39d2215337d22033df8f13e03bd23bd33112
3bd334d733173bd773123bd226164e921b22271639d222623032cd8f16e038d2
2dd3392243932b23371624d305e7722332d332672fd33037318b32d32fd73227
29d7735730372c8b22d3335728d33037b28f18e02cd778162a977b2119162bd1
01e332212ad1126321d11033a48f19e025d338167b22291624d102e2222124d1
126220d110320e8f00e220d122210b0001e00b0011e00b0012e00b0013e00b00
17e00b0018e00b001ae01601c0003601340109000000001044332211100000ff
88776655040000100050018c4040018c5555aaaafc5f018c00f0ff1f0040018c
001000104440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c00030001008300010
0070018cc1c1c1c100400010000000ff08400010862f962ff45110d2222210d8
422810d0522010d4122410d5622510d6722610d7122710d3f25992238302f359
9222122800e11220122412251226122712238302f6690b00f6680900000000e0
040000e0080000e00c0000e0100000e0140000e0180000e01c0000e0862f962f
a62fb62fc62fd62fe62f224ff07f536b636a7369fd5e2ad11b24431f29dd422d
00e829d1822129d282220871822108728222087182210872822208718221830d
e21f611f722f22dcfc575366a3650b4cb364e21ffc52211f922f2367b366a365
0b4c93641bdee21fa11f922ffc57b366a3650b4cb364f351122d17d112d21222
12d182210872822208718221087282220871822108728222830de21ffc51111f
922f1367b366a3650b4c9364107f264ff66ef66df66cf66bf66af6690b00f668
00000081000000e0040000e0080000e0b40b018c0000803e00000024224ff87f
f351111f722f6367536643650cd10b4100e40cd200e112220bd3122304731223
04731223047312230473122304731223047312238302087f264f0b0009000900
1c0c018c000000e0040000e0862f962fa62fb62fc62fd62fe62ff75cf85bf95e
24d14b2124d2122224da25d1122a25d9522925d8622825d000e1122024d51225
24d6122624d312238302436d2b2dd222b22ae229c22812201225722612238302
d222b22afb5bb229c22812201bdbb225722612238302d222fa5dd22ae229c228
b220122572261223830215dddb244222fa54422afb5dd229c228b220b2257226
12238302f66ef66df66cf66bf66af6690b00f66800000080000000e0040000e0
000000c0080000e00c0000e0100000e0140000e0180000e01c0000e00000803f
000000f0862f962fa62fb62fc62fd62fe62f224fbc7fc07f9bd112619bd22665
266622679ad2266322625b216b217b213b212b2144e0160f96d11060fec90021
ffe295d322230473222300e204732123106001cb002191d1126091d3392005cb
022118718fd33221f471222110718ed222216c718dd222219c718dd222210471
8cd2222110718cd222218cd18cd212228cd212228cd18dd222218dd600e38dd8
8dd412e745330a02094223611c3113652c355c353369583953609c3008408e01
122601731047ed8f047684d184d2222184d185d22221047184d22221047184d2
222184d1c59222210471c392222104711fe222210471be9222217fd27fd310e1
32221041fc8f04727dd1b59222213c717cd222210871077222217bd27bd3ac91
32221041fc8f047279d17ad77ad310e27221a3961c3632261042f98f047177d1
77d2222104719a92222176d276d310e132221041fc8f04721fe174d2122274d2
122274d100e002ea00e973d807e41fe58697869317e6d62f019d230df66d8c21
1043058d017726657035f989f8af63616ad227536ad22033648d48e001e1160f
10e168d212220472122267d267d30ce132221041fc8f047200e163d212220472
122263d163d2222163d164d2222164d12e4164d1ffe700e308e2722131111042
fb8f08715fd360d1122360d260d1292148977b2111135fd1122200e111125ed2
12225ed212225ed105e222215dd00b40090040e7fc3700175bd1eee233932021
5ad71c3720275ad71c37202759d71c3720271043f38f017157d458d00b4005e5
082001ee028de61fb4a0090054d00b40090054d454d10b41092454dcc36dc51f
bda200ee52d2205335d22033978996af01e1007ce003ff7f8001800000101f7c
e00700f836010048846c5fa0f46c5fa0c0785fa00400d8ff0800d8ff44805fa0
000080003f7d1700000020000401150000007f020000df0177df270000001000
20805fa028815fa08c805fa0000000030c0010a59032018cabaaaaaa88805fa0
17b7d138000010a500000002000080200000003004905fa0001000a403030303
74805fa000ff000000825fa080800000002006a4050505050606060614905fa0
1ffc0000000006a4070707071c985fa01c9c5fa0004006a4ffff0000c040018c
11111111380000ff000018a500000080180018a54c0e00a02c805fa000001800
a800018c0040018c000000100050018c00f0ff1f443322114040018c000000ff
100000ff2c0a018c000023ac0000ffff0000feff0000fdff5eb000006c06018c
6600018cff7fffff6c00018c5832018c0041018cbd9562d462d00b4009000820
028fe61f42af09005fd460d00b4005e50820018ba3a002ee5dd8ab9b59da5dd9
b3650b4a83640820018b9aa002eea1900c389038f58fb36553d454d00b4008e5
0820018b8fa003ee959553d44dd00b4009000820028f10e187a003ee4fd650d2
20677c6764633c633037028d10417ea004eef58f01724bd17b9210677c674ad3
1c3330633c633037028d1042a8a005eef38f017145d16c9210677c6744d31c33
30633c633037028d10429ba006eef38f017135d435d00b4002e50820018b93a0
08ee3cd13cd2222104715592222101e13ad21222087212220472122238d12260
01c8018d1041fa8b36d1126001c8028ffc717ba009ee00e222210471126001c8
018975a00aee30d1379202a009000c8d017110677c672dd31c3330633c633037
f58d10420beeb1aee61f29d110611c61249220315e8f0cee26d110611c612031
5a8f07ee24d110611c612031568b23d110611c612031538b00ee97aee61f95ae
e61f93aee61f91aee61f8faee61f8daee61f00280004004000180010ee000900
0000200c9809018c5eb000006c06018c0000210c0028210c0000220c8032018c
000020ac000021ac0000ffff000022ac0000feff04745fa00000230c0c745fa0
801a060018745fa0000023ac0000fdff001023ac002820ac002821ac004022ac
54aee61f52aee61f50aee61f4eaee61f4caee61f4aaee61f48aee61f46aee61f
44aee61f017993600888038f936800a1017e936807e00d4846911928936001c9
0b2870e0860fd26af553326bf3667076b3651ed70b47a364071ff36778778366
b3651bd00b40a36440e2fc322e51f7501030318f70e02f5127922921fe022031
028de82ed1a001eecc8ff366860f7076a3650ed70b47a364036bf36678768365
0cd00b40a36440e2fc322e51103b0189bda002ee2f51089339212c522031b28d
017902ee0aa0e51f00030103d409018c1000018c2c00018c01eee51f59d10b41
00e859d00b400900036158d956db0b4b136aa230058f0361a030ffe22a381049
f58b63e1163801ee028fef1f07a209004fd850d1122850d10b41090082624fd3
4ad1326001c8018d1041fa8b4bd11261136001c9081f136001c8018910a202e0
43d1126343d11033018b0ba203e040d1126040d11032038dff88018904a201e0
3bd11260ff885e893ad222213cd13dd2222104713cd222210471629222213bd1
3bd22221147101e2222113622fd1226001c8018d1041fa8b2dd112611c611360
0688018909a204e029d22260294019403088028d747202a204e022632dd22033
0189fea105e022d222d3322224d22ad33222047224d33222047228d332220472
27d33222047227d3322227d727d320e2322701731042fb8f04771cd21cd33222
147201e33222236310d2326001c8018d1042fa8b0ed22260ff88048922600c60
07880089181fa0a1090057afe51f55afe51ff5500470051fe3600a882889f8ae
00e902200c06018c3c06018c80841e0000e100ac785634128c05018c186c5fa0
00e000ac0000008000e1000c046c5fa000e0000c56657273220000800c010022
000000020000006414e000ac0000dec0047d73d1103d018912adc51f71d8836c
057cf36a547a70db84600c69ab80f3640b4b5f74036168e0982929022031028d
160f19a103eeab840c61c8909b201030028dc03812a103eee68b64d8836e147e
63dd64dc64db65da0b4d0900051f8669f36678769365f3640b4c747440e3fc33
3e52f361707110320189f9a004eef3617471a490fe0210320189f3a004ee3c52
f5512a219a21b9213f533a22a9222b211821028de038e7a004eed58b50d00b40
f36b036a4fd9936e187e4fdd6c7b4fdc96680b4d83640038028d02e0d6a005ee
0a2868e0860fb365f3640b4c68740038028d40e2cca006eefc322b51b031028d
903ec7a006eee38b41d1181241d1191241d93dd80b48936440dbf3640b4b6074
3fd40b4807eef3640b4b64740b489364f3643cd10b41687440e7fc377a527851
1032478fe51f36d11a17f3656c75f3642ed00b406874f36432d10b41687440e1
fc311a521951103208ee338fe51f2ed00b4009ee01882d8fe51f2cd00b400aee
0188278fe51f2ad483600b400bee20d428d00b40090028d110301b8fe51f27d4
24d00b4009000188148fe51f24d140e0fc30181000e11a10f3656875f36421d1
0b41607440e3fc333a52385110320cee028de51f42ae0900a36435a083608000
8032018c5032018c4800018c3c32018c6600018c5000018cf2830070f3830070
8400018c2432018c7200018c7a00018c0000803f00000040010004008005018c
010024008605018c8a00018c9800018c01000c006805018c000080bf01000080
785634127605018c0b40090044d800e1122844d10b41090082627e9110320dee
088fe51ff36440d00b4068740788138f00eee51ff2ad0900f0ade51feeade51f
ecade51feaade51fe8ade51fe6ade51fe4ade51fe2ade51f0eeedfade51f33d9
926833d10b41090064e1122931d120e22221136230d1226020c8018f1041fa8b
2ed00b40090029d182212ad120e2222103619c7102e2263129011c31d8ad1f1f
03a0081f01a0081f081f25d1126425d125d22363136600e020e7336528354075
5026017600231047f78f01731cd31fd77223dc7300e772231dd7122704772227
047710e662271997722323651075136000eee71f01e808a010e3d6af081fd4af
081fd2af081f1043248924666c6604677c677036f789f6af871f800111540900
4440018c2c05018c4005018cc8805fa00c06018c00695fa080841e003c06018c
4000a0ff9040018c7040018c018200001000a0ff6ed220622822038901922302
0900d6166bd2226210711032228df75ee82e018f03eee71f67d268d112220171
111267d100e332213111321133113411351164d732275fd32223136504731223
047304e66223a893322710715bd004e813a004e35cd112615031d98ff75e5bd1
12611821d48ff75e56d1126002c8d38fe82eceaf090010430789f75ee82efa8f
56660036f789f6af871f4dd334533823048ff75e47d3326330322589e82e2a8d
05ee00e247d122212471422148d149d33b2149d3222349d249d7222732632033
1b8d00e244d3222341d3222345d222213263203301ee248fea1f126241d11032
1b8ff3611fa0787137d222621032d58ff75ed7af00e2d4afe71f726337d22033
ffe22a622a1f00e233d3222330d3222334d2222132632033df89fa5eeb610271
1a1ff3617871399221213890118158e012810fe0138133901481329015812ad1
00e220211871a0e2202128d228d1206008c8018f1041fa8b24d1106008c81a8d
09eef362787223d306e1256771231041fb8b21d10fe2222120d1139222210471
f072222100e11ed30d940d950d961dd80c994aa000e2ecafe61f314420010002
000383001f0fff0077772c01a10f09008040018c1000a0ff6840018c0100feca
5040018c1c00a0ff1400a0ff1800a0ff4c40018c000000e0000014a50df0ad0b
000014e52143341284705fa018705fa0a086010080705fa0002870a0402070a0
000081a04b1714060a071360783001400c37f5e00d4797071a0013670837d59e
ec3771230172027361714632ec8f85315123017202736032f78f617100e16cd2
1222047212220472c193322204721fe332220472bc9332220472122204721222
0472122263d1b4922221047160e2222161d100e0ae9500e6ad97ad935fd25630
d62f019d230df66da014612101707030f58f027100e15ad21222047212220472
9993322204721fe3322204729093322204721222047212220472122204728c93
3222047248e3322288924ed32223047322230473222304732223047322234ad2
12220472122249d17992222148d600e7769048d47598759373620922236106e5
5d412c311c312c3145310a021365283501455c321942094287021a022831629e
ec31112601771043e68f027600e13ad212220472122204724d93322204721fe3
322204724493322204724d933222047212220472122231d13b922221047160e2
2221d87141922221f65007e11d401fcb40e2fc32061200eeeb1fee1fed1fffee
ec1f00eee91fdea700e8188d5a884d8f648823d12a9222210190230083602813
20d10b4102e407a209001ed10b4103e402a209001bd10b4104e4fda109001ad1
15922221019023008360fc1230f800011f3c1f0fff07001070170f0f00190242
ff0fcf07011019fc00780342e003e07f040070a0240070a0000082a090e80000
840070a0ac0070a0c00070a0800070a0000083a06b6f4606040170a0240170a0
1c985fa0e405018c10905fa002890c911038138b06d107d2222183606488178b
05d10392222113a00900c8001f7c0900000070a001c200001c9c5fa0e6911038
0389019023008360481273d173d2222173d174dc122c74d1126340e2fc323312
72dee2644412c265551201e2222120e1122e6fd1122c6fd16fd612266fd71227
6fd170d0122070d1141f131f00e9921f911f6ed2222f6eddb99700e66dd50b4d
00e46ddbb41fb31f921f911f6bd1122f6bd700e667d50b4d00e46ada922a6ad3
92236ad492246ad592256ad692266ad792276ad092206ad19221830affe369d2
322210e1122e68d1122c68d152d4122452d5122552d753d67226b41fb31f921f
911f52dee22f62d700e652d50b4d00e4922a55d0922055d1922155d2922255d3
922355d4922455d5922555d69226830affee54d7e22757d112611821018b64a1
01e255d1126177e22631028f017183a1090051d2122251d112600820018be9a1
090009e11630018b2ca20a8801704bd102212dd14ce0fe044221047150e0fe05
5221147154e0fe066221087144d22221047144d2222144d111600d6043d11161
1f88028f1d6124a2090041d641d240e1236740e361271043fc8f027728901041
f68f0c323cd112611821028f02e222a2090039d122211c911638290237d1088f
222115d136d2222114911038018b35d1106114d112d2222130d1126118210189
61a2ffe713de30dc60a0c41fa00000800001030106010900000070a001820000
0000200060805fa048805fa04c805fa00000700100007f0068805fa06c805fa0
0000008044815fa0000000430000003f4c0d018c00008020000080429a99193f
ff0000ff000000e0040000e0080000e00c0000e0100000e0140000e0180000e0
1c0000e014805fa00000740100003f0000ff00ff2480018c2080018c1880018c
00007f020000df01140a70a4c80a70a400f80000804070a42c80018c3080018c
0000c700010071a00000dc4268d1131f68dbb21f68ddd11f68daa22f68d9ffe7
00e6c3940b49e365c41f66d1131fb21f65d1111fa22f65d765d5b7940b4900e6
c41f64d1131fb21f63d1111fa22fffe762d6ac940b49e36561d1141f61d1131f
61d1121fd11fa22fffe700e65fd50b4900e45fd1141f5fd1131f5fd1121f5fd1
111fa22fffe75ed65ed50b4908e45ed15ed222215ed25fd332220472e2220472
00e3322204725cd00222047202220472022204720222830100e04ddd57dc1363
53db57da3dd957d400e257d513a204e11638018b87a7836054d155d2222155d1
ffe2222154d10b41090054d110600fc90688018b78a5090051d1126118211f89
50d1126118211b8f0820028d09e1dca501e240e3fc331e131f134bd1126004e7
00e600e5f3640b40787478e0fe011821028d01e245d1222145d2226101711222
57a5836043d124ae090043d1222143d2222c36d136d22221b41fb31f921f911f
16d1122f3ed700e63ed50b4d00e4922a27d29222047292220472922204729222
047292220472922204729222830a29d1ffe222217fae090033d111611d6133d0
0031f78932d101e275ae2221800088000000004300008c42000000420000003f
4c0d018c0000304300001043ffffff8000009080000090430000404300020030
00005c420000c0420000f0410000002000002f43000096430000fa4200007a43
00000e0c24008020000000e020000080040000e0000000c00000803f00004343
0c0000e0100000e0180000e044815fa00000008014805fa08c05018c8c705fa0
1080018c0880018cbc00008c0080018c0c80018c000020002480018c00007801
ff00ffff00008020280a78a41ff800001c80018c6edaa26c6ed1cb21122a6ed1
10e2222114716dd222216dd16dd21222047212226cd16dd222216dde6ddbb41f
6dd1131f00e9921f911f6cd1122f6cddba9700e6e3650b4d00e4b41fb31f921f
911f68d1122f68d700e6e3650b4d00e466d1922166d292220472922204729222
04729222047292220472922204729222830160d1ffe22221c22a5fd101e22221
d7ad0900fc8b5dd111600d60407111611f88078d1d615ad101e2222156d10be2
c7ad222181922c3156d33821f689f2af09007a977c3153dee821068b50d11261
1821058950d6d1ad09004fd6cead09006c96cbad09004dd1126001701088508f
02214bda01ecc22a33dd10e1122d49de49d1122e32d133d2122248d3122332d1
32d2222133d1141f131f00e9921f911f32d1122f32db4a9700e62dd50b4b00e4
3fd1141f131f921f911f2ed1122f3dd700e627d50b4b00e42cd192212cd29222
047292220472922204729222047292220472922204729222830126d1ffe22221
4ce0fe04422a50e0fe05522d54e0fe06622e2dd113d712272cd10c7e122e2cd1
c22188ad09002bd1141f2bd1131f2bd1121f2bd1111f2bd1122f00e60cd510d1
0b4100e48ead090000802004e00700fff4805fa0000001004c805fa000007c01
00003f0068805fa044815fa0000000800000802000008042000000430000003f
4c0d018c9a99193fff0000ff000000e0040000e014805fa01880018c200a7ca4
1c80018cdfff000000f800002880018c48805fa060805fa0000060016c805fa0
00000042ffff00ff00007f020000df012c80018c0000484300809f4300007042
000052436666663f29071ceeed473b27722340e7fc377357722b93d76227922a
22240c77222791dee22508772227830310410d8d017002c840e6fc36d3160089
c31601c88ad6df8d03888ad6ddaf290788daa41f88d1131f85d9921f87d1111f
87dee22fffe787d687d588d00b4008e4a41f87d1131f921f86d1111fe22fffe7
85d686d581d10b4108e485da85d4422a85dd86d2222d74db85d1122b85dc86d6
622c00e985d3922385d5922585d7922785d09220830ab22a84d1122d84d7722b
e22c92239225ffe2087322239220830ab22a122d7fd3322be22cfc7592257ed1
f87012200875222508709220830ab22a7ad0022d722be22cf875122504759225
0475222504759225830a75d5522a022d322be22c69d012200470122004702220
04709220830a422a60d4422d6dd4422b622c62d69226f870922062d492240c76
9226830ab22a68d6622d722be22cfc709220fc7492240870222008749224830a
b22a622d322be22c54d69226fc701220fc7422240c769226830ab22a5bd6622d
722be22c4dd712279220222408709220830a522a622d322be22c122748d31223
22249220830a52d2241f131f621f51d1111fe22fffe739d5559434de0b4e00e6
4dd1122a39d0022d34d1122b4bd1122c32d33ad2322230d539d4522439d69226
39d79227830a00e300e2c36b636affe9736426a004e542d01cd142dc04a01366
23671ad140dc236640dddb2724dd722d25de022e14d0c22019d7722b27dc122c
27d76227922a2224830d122d622e9220222b222c2227222a2224830d1045678d
017302e1336002c8028d392193a401c801c8018950a4038829d01821d08f1367
29dcd1af13668000080000e00000803f0000574300006b430000f04100002041
0000003f00c00034002080204c0d018c00005c4200000c4200c0003600008020
000000e008000080040000e0000000c0002480200c0000e000c80088100000e0
140000e0180000e01c0000e00000f0420000e041000050420000004300002043
080000f00004802000002443000040430000604300008042c800008000020030
0000484300006c4300005643c80000e0add112600288018b44a1ffe7abda00e9
922aabdd922dabdc922cabde922eabd09220abd19221abd29222abd39223830a
aad5abdbb11fabd1122fabdeabd753660b4e00e4b11faad1122faad7aad6abd5
0b4e00e4aad1122a922d922c9ad4922402e29ad5222506e199d6122699d72227
99d01220830ab11fa0d1a2d7a2d6a3d5a3d40b4e122f922a922d922c8ed29222
8ed392238ed492248ed592258ed69226830a9cd7741f9cd1131f9cdee21f9cd0
011f9cdee22f9cdb9cd69dd59dd40b4bffe794d1141f9cd1131f94d2221f9bd1
111fe22f9ad696d596d40b4bffe7922a922d922c78d3922378d4922478d59225
78d6922678d79227830a92d0041f88d1131f91d2221f91d3311f91d4422f91d7
91d592d40b4b00e68ad5541f90d6631f89d7721f8fd0011f8fd1122f8fd78ad5
8ad40b4b00e6922a922d922c62d2922262d3922362d4922462d5922562d69226
830a87d187d2222187d1141f87d1131f87d1121f87d1111f87d1122f87d700e6
87d50b4b00e460d7741f86d1131f78d0021f85d1111fe22f84d785d591940b4b
00e6922a922d922c4bd192214bd292224bd392234bd492244bd59225830a7dd6
622f7dde7dd77ed67ed57fd40b4e090078d7722f7dd77ed67ed57fd40b4e0900
49dee41f52d0031f61d1121f5bd2211f5bd3322f5bd75cd55cd40b4b00e6e41f
5bd4431f421f5bd5511f5bd6622f5bd755d556d40b4b00e6922a922d922c2ed7
92272ede922e2ed092202ed192212ed29222830a69d1ffe22221439110380189
70ab090066d267d1226001c8018d1041fa8b65d165d2222165d166d222210471
65d22221047165d2222104713fd22221047163d2222163d363d220e122230172
1041fb8f047361d161d22221147101e22221136253d1226001c8018d1041fa8b
43ab09005bd1141f131f5bd1121f111f5ad1122f5ad65bd51fd10b4108e4adae
09008000960009002c80018c000000e0040000e0080000e00c0000e0100000e0
140000e0180000e01c0000e00000a0420000403f0000c8421c0c018c00007043
00006f43000074430000524300005c4300000020000000430000444300008042
0000020000005c42000068430000f041000048430000003f4c0d018c00c40030
000090200800000400008d4300007a4300c6003000002a430000024300000c43
9a99193fff0000800000909400000002000034430000f0429a99993e0000ff80
60815fa0000000800000d84200008c420000be42000020423333333fffff00ff
000080200000964300008043ffffff80000090806666663ffc0c018c0000d442
000082420000c2420000344200004d4300009143000039430000874314805fa0
186c5fa080841e0000e100ac7856341200e000ac2200008000e1000c0c010022
0000006514e000ac0001dec0046c5fa000e0000c00008a420000a0403333733f
00000c0c1b00802063d222610171122283603c88028f4288a9a00900048ffb5e
e82e018ba8a009005cd10b4109005cd10b4110e45bd1126283639c73aa911633
028ff951c6a009002831fc5e163e008b1c1ffd5e123e00891d1ffe5e1c3eee1f
291f00e148e0fe022822038d1821018922a10900028d3fe112a1fd521638018b
c2a08360017883603c88028f3ce131a809001638018b18a846881e88028f2d88
1ea80900028f0f881fa8090001899fa183603dd10b4101e4836208422c320842
8c32184209428c326591192283603fc9036108410c31184134d33c3134d32121
1043fc8f02710daa090032d1222100e131d210220c720ae33022047210222fd1
a0e220212ed22fd1206008c8018f1041fa8b2bd1106008c8238d13e268712121
00e221210ae3312121212121212124d224d1206008c8018f1041fa8b20d11060
08c811896871116211601162116211611ad220620fc918401c610b211ad257af
12221ad1faaf090018d1f7af090018d00b4000e404a00b1f15d00b4001e40b1f
06d10b41090006d10b4110e405d1126267af291f9500ff7f1080018c0c06018c
4c06018c0c00d8ffe405018c000000a500a000000880018c84705fa09c705fa0
18705fa0a08601000480018cffff0000a007018caa9110381f8ff55ee82e1c89
56d1a493322156d1ec31291f55d2122255d112611821078d8360226253d11032
038f01c8c2a00ae201c8018be1a009004fd150d2122236af017887911038b78f
ce71fd53fc5ee8331633268dfe5e4ad3ec337d911633268d44e0fe000820278d
f65e3ed175933221291ffe5e42d2ec326e9116325e8d44e0fe0008205d8ff65e
e82e5d8f48e0fe0008205c8fff5ee82e278df85039d1b9afec3130d15a933221
37d1b3af291f2dd155933221ddaf291fe82e0e8d58e029d1fe000221291ffd52
fc5ee832449116322dd19f8dfe5ecdaf0900291fd6ae01e120d13d922221efaf
fd520820038df75e26d18faf0c31e82e028925d18aafec31fa5ee82e028923d1
84afec31fb5ee82e038d40e020d17dafec3101e1fe021732038f40e01dd175af
2c31fe000188028910d16faf09001ad16caf090019d169af090019d166af0900
18d163af090018d160af0900fa00e003c8001f7c007cff03007e090010905fa0
0001d0ba4840018c1080018c0d600d600000400050805fa043c721fe0008d0ba
0200d0ba0009d0ba000ad0ba000bd0ba000dd0ba0007d0ba4d4d0d600300d0ba
0400d0ba0500d0ba0600d0ba5bd11261c971263112895ad112611821138959d1
1262a9911032028957d108a0090057d1126118210a8956d101a0090055d156d2
122221af836055d1f9af090054d1f6af090054d11daf090029071ce61821028d
6d4778ab090050d050dc51d67cab090003c9038801897ba83fe13fe11638028d
83605aae836201c8018baba8090049d1019c230c09009ced47d2226210712031
02ee068fe71f45d11261503102ee048de71f01922302090020e9019123010900
5ee93360038829071ce11d473cd038d136dc49ab1366f48f182139d06eab0900
4121017002715630058f20c8d62f019d230df66d56ebf38f2364f1af336401a0
93628362212101700271a630f78f0388f78d46302c8f66302c8b312101705888
f38f027127d12892222127d227d1292127d33b2113662367e07726d518e35227
1043fc8f047724d30ce77223fc7310e7722322d708e3722101771043fb8f0471
83061ed700e101e60195230508e318dec8af5362c6af7362280680000c80018c
0880018c0480018c030cd0ba0080018c040cd0ba010cd0ba4840018c020cd0ba
9d5a0d60000020000000484300006c430000803f000040001000a0ff1400a0ff
000070431c815fa0e040018ce0ffff03000000e0111111113c0000ffe0ffc000
400000006400000000000000400100000e00000000000000100000000a000000
0000000001000400000004000300040001000c00010024000100040001000000
0200000000010000000200000303000000017f80ff0000000000000001000000
02000000ffffff7f0000008001000080ffffffff78563412efbeadde00000100
5345474120534547414b4154414e4120000000000000000017b7d13800000000
00000000ffffffff000020440000000017b7d1380000803f00000000ffffffff
000000000000f04317b7d138000000000000803fffffffff
""")
# The program built with -DLIVE_HEAVY (live_prog.c): a frame of many
# vertices, as a game's are, for the parse's speed
# (tools/pvr/ta_parse_bench.sh), and a shadow volume far off the screen.
PROGRAM_HEAVY = bytes.fromhex("""
01df02d02b40090000f0008cac0f018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018c4824178d01e11634128b00e101e701711b634362
3d427632f9891b6217722d4405d229247f7117e22d4143600b001b20f3af00e1
0b004360ffff7f00f47ff361319221214d6229444c602d93236739277b201181
2c60128100e013815d6229455c6029233b2014812c6015810fd101e220211871
a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f36209d706e1
256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa018705fa0
a086010080705fa027d100e220210c71602163621942047120210871a0e22021
22d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed3456221231041
fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d536400e0
14d70174180063610a3101416362017202e33232078d017105a001e119422404
1041098d027071622d62036301736233f48f2405f5af104107d110610b0001e0
0b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0862f962f
a62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba009e0fc84
0fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288608f01e0
f3620c7225840c63284326840c6118613b2127840c600b21b9931c33b8922633
018b9ea001e08828488d83605cd222621032018b97a002e00ee6f36559d457d0
0b400c750820018b8fa009e0f3600c700184118801898aa003e0f3600c700484
0188018985a003e0f3600c7005840288018980a003e0f3620c722b840c632843
2c840c6118613b212d840c622b217e922c317d922631018b6fa003e064e6f365
41d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce938d21222
48a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af6f801049
088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca00ae01c31
1042068dff736821f9891c314a21f7af1d611040068954622c6218422a217363
f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c6213631943
3032228ff3622b840c621c611032ffe00a600840707f264ff66bf66af6690b00
f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf0900e9af
09e0e7af04e0e5af04e0e3af04e0a8fd2b018000211009002433018c2807018c
1480018c1833018c0c33018c00800000ffff00000ad142210471522101e109d2
1222087212220472122207d1226001c8018d1041fa8b05d1126001c80b002900
04745fa00c745fa000093d0018745fa0626113671947014725922821ffe22a62
436300432903136001402444136019407a2001c8108943605c302a2306342907
3a2773611841236318433c333b21203729022b210b001226436058302a234630
2907eeaf3a27000249d1126249d11032048d00e248d122210b0000e047d148d2
122248d221521032718b47d112600188028d11e00b00090044d345d131110471
44d2292144d645d772166c921b222316726230325d8f00e341d23222736301e7
7223226360922033558b39d2215337d22033df8f13e03bd23bd331123bd334d7
33173bd773123bd226164e921b22271639d222623032cd8f16e038d22dd33922
43932b23371624d305e7722332d332672fd33037318b32d32fd7322729d77357
30372c8b22d3335728d33037b28f18e02cd778162a977b2119162bd101e33221
2ad1126321d11033a48f19e025d338167b22291624d102e2222124d1126220d1
10320e8f00e220d122210b0001e00b0011e00b0012e00b0013e00b0017e00b00
18e00b001ae01601c0003601340109000000001044332211100000ff88776655
040000100050018c4040018c5555aaaafc5f018c00f0ff1f0040018c00100010
4440018cfc6f018c0df0ad0bb0b0b0b0c0c0c0c000300010083000100070018c
c1c1c1c100400010000000ff08400010862f962fa62fb62fc62fd62fe62f224f
e07f421f551f631f741f40e07827778dfe0aa3610141171f00ed3ed143621b22
261f3ddc00ee51a0d36bf7508030048fa3613ad203a0ff7139d9a361ff718031
29011ce33d41f2577b21cb21f3538c33122c34d09220f26733d1722108702220
0871e2210471e221047132210471e221830c0178803a2589836001400fc92bdd
03640b4d01740369836001c903641c7408444c34f1500b4d0c34022f0b4d01e4
0362b3600388018f8828c5890588bc8d0688c38fa361ff718031bf8fa3611cd1
bbaf122f017bf450b0301989f653322c18d014d7022714d1f552222116d3e223
0871e2210471e2210471e2210471e221830ca82ae68d00e8b36007c9bcaf011f
207f264ff66ef66df66cf66bf66af6690b00f66802000080000000e00000c07f
0000807f040000e0080000e06c06018c0000006a000000c00c0000e0862f962f
f45110d2222210d8422810d0522010d4122410d5622510d6722610d7122710d3
f25992238302f3599222122800e11220122412251226122712238302f6690b00
f6680900000000e0040000e0080000e00c0000e0100000e0140000e0180000e0
1c0000e0862f962fa62fb62fc62fd62fe62f224ff07f536b636a7369fd5e2ad1
1b24431f29dd422d00e829d1822129d282220871822108728222087182210872
822208718221830de21f611f722f22dcfc575366a3650b4cb364e21ffc52211f
922f2367b366a3650b4c93641bdee21fa11f922ffc57b366a3650b4cb364f351
122d17d112d2122212d182210872822208718221087282220871822108728222
830de21ffc51111f922f1367b366a3650b4c9364107f264ff66ef66df66cf66b
f66af6690b00f66800000081000000e0040000e0080000e03c0d018c0000803e
00000024224ff87ff351111f722f6367536643650cd10b4100e40cd200e11222
0bd312230473122304731223047312230473122304731223047312238302087f
264f0b0009000900a40d018c000000e0040000e0862f962fa62fb62fc62fd62f
e62ff75cf85bf95e24d14b2124d2122224da25d1122a25d9522925d8622825d0
00e1122024d5122524d6122624d312238302436d2b2dd222b22ae229c2281220
1225722612238302d222b22afb5bb229c22812201bdbb225722612238302d222
fa5dd22ae229c228b220122572261223830215dddb244222fa54422afb5dd229
c228b220b225722612238302f66ef66df66cf66bf66af6690b00f66800000080
000000e0040000e0000000c0080000e00c0000e0100000e0140000e0180000e0
1c0000e00000803f000000f0862f962fa62fb62fc62fd62fe62f224fbc7fc07f
9bd112619bd22665266622679ad2266322625b216b217b213b212b2144e0160f
96d11060fec90021ffe295d322230473222300e204732123106001cb002191d1
126091d3392005cb022118718fd33221f471222110718ed222216c718dd22221
9c718dd2222104718cd2222110718cd222218cd18cd212228cd212228cd18dd2
22218dd600e38dd88dd412e745330a02094223611c3113652c355c3533695839
53609c3008408e01122601731047ed8f047684d184d2222184d185d222210471
84d22221047184d2222184d1c59222210471c392222104711fe222210471be92
22217fd27fd310e132221041fc8f04727dd1b59222213c717cd2222108710772
22217bd27bd3ac9132221041fc8f047279d17ad77ad310e27221a3961c363226
1042f98f047177d177d2222104719a92222176d276d310e132221041fc8f0472
1fe174d2122274d2122274d100e002ea00e973d807e41fe58697869317e6d62f
019d230df66d10211043058d017726657035f989f8af63616ad227536ad22033
648d48e001e1160f10e168d212220472122267d267d30ce132221041fc8f0472
00e163d212220472122263d163d2222163d164d2222164d12e4164d1ffe700e3
08e2722131111042fb8f08715fd360d1122360d260d1292148977b2111135fd1
122200e111125ed212225ed212225ed105e222215dd00b40090040e7fc370017
5bd1eee2339320215ad71c3720275ad71c37202759d71c3720271043f38f0171
57d458d00b4005e5082001ee028de61fb4a0090054d00b40090054d454d10b41
092454dcc36dc51fbda200ee52d2205335d22033978996af01e1007ce003ff7f
8001800000101f7ce00700f836010048846c5fa0f46c5fa0c0785fa00400d8ff
0800d8ff44805fa0000080003f7d1700000020000401150000007f020000df01
77df27000000100020805fa028815fa08c805fa0000000030c0010a59c33018c
abaaaaaa88805fa017b7d138000010a500000002000080200000003004905fa0
001000a40303030374805fa000ff000000825fa080800000002006a405050505
0606060614905fa01ffc0000000006a4070707071c985fa01c9c5fa0004006a4
ffff0000c040018c11111111380000ff000018a500000080180018a54c0e00a0
2c805fa000001800a800018c0040018c000000100050018c00f0ff1f44332211
4040018c000000ff100000ff680a018c000023ac0000ffff0000feff0000fdff
5eb00000a806018c6600018cff7fffff6c00018c6433018c0041018cbd9562d4
62d00b4009000820028fe61f42af09005fd460d00b4005e50820018ba3a002ee
5dd8ab9b59da5dd9b3650b4a83640820018b9aa002eea1900c389038f58fb365
53d454d00b4008e50820018b8fa003ee959553d44dd00b4009000820028f10e1
87a003ee4fd650d220677c6764633c633037028d10417ea004eef58f01724bd1
7b9210677c674ad31c3330633c633037028d1042a8a005eef38f017145d16c92
10677c6744d31c3330633c633037028d10429ba006eef38f017135d435d00b40
02e50820018b93a008ee3cd13cd2222104715592222101e13ad2122208721222
0472122238d1226001c8018d1041fa8b36d1126001c8028ffc717ba009ee00e2
22210471126001c8018975a00aee30d1379202a009000c8d017110677c672dd3
1c3330633c633037f58d10420beeb1aee61f29d110611c61249220315e8f0cee
26d110611c6120315a8f07ee24d110611c612031568b23d110611c612031538b
00ee97aee61f95aee61f93aee61f91aee61f8faee61f8daee61f002800040040
00180010ee0009000000200cd409018c5eb00000a806018c0000210c0028210c
0000220c8c33018c000020ac000021ac0000ffff000022ac0000feff04745fa0
0000230c0c745fa0801a060018745fa0000023ac0000fdff001023ac002820ac
002821ac004022ac54aee61f52aee61f50aee61f4eaee61f4caee61f4aaee61f
48aee61f46aee61f44aee61f017993600888038f936800a1017e936807e00d48
46911928936001c90b2870e0860fd26af553326bf3667076b3651ed70b47a364
071ff36778778366b3651bd00b40a36440e2fc322e51f7501030318f70e02f51
27922921fe022031028de82ed1a001eecc8ff366860f7076a3650ed70b47a364
036bf366787683650cd00b40a36440e2fc322e51103b0189bda002ee2f510893
39212c522031b28d017902ee0aa0e51f00030103100a018c1000018c2c00018c
01eee51f59d10b4100e859d00b400900036158d956db0b4b136aa230058f0361
a030ffe22a381049f58b63e1163801ee028fef1f07a209004fd850d1122850d1
0b41090082624fd34ad1326001c8018d1041fa8b4bd11261136001c9081f1360
01c8018910a202e043d1126343d11033018b0ba203e040d1126040d11032038d
ff88018904a201e03bd11260ff885e893ad222213cd13dd2222104713cd22221
0471629222213bd13bd22221147101e2222113622fd1226001c8018d1041fa8b
2dd112611c6113600688018909a204e029d22260294019403088028d747202a2
04e022632dd220330189fea105e022d222d3322224d22ad33222047224d33222
047228d33222047227d33222047227d3322227d727d320e2322701731042fb8f
04771cd21cd33222147201e33222236310d2326001c8018d1042fa8b0ed22260
ff88048922600c6007880089181fa0a1090057afe51f55afe51ff5500470051f
e3600a882889f8ae00e902200c06018c3c06018c80841e0000e100ac78563412
8c05018c186c5fa000e000ac0000008000e1000c046c5fa000e0000c56657273
220000800c010022000000020000006414e000ac0000dec0047d73d1103d0189
12adc51f71d8836c057cf36a547a70db84600c69ab80f3640b4b5f74036168e0
982929022031028d160f19a103eeab840c61c8909b201030028dc03812a103ee
e68b64d8836e147e63dd64dc64db65da0b4d0900051f8669f36678769365f364
0b4c747440e3fc333e52f361707110320189f9a004eef3617471a490fe021032
0189f3a004ee3c52f5512a219a21b9213f533a22a9222b211821028de038e7a0
04eed58b50d00b40f36b036a4fd9936e187e4fdd6c7b4fdc96680b4d83640038
028d02e0d6a005ee0a2868e0860fb365f3640b4c68740038028d40e2cca006ee
fc322b51b031028d903ec7a006eee38b41d1181241d1191241d93dd80b489364
40dbf3640b4b60743fd40b4807eef3640b4b64740b489364f3643cd10b416874
40e7fc377a5278511032478fe51f36d11a17f3656c75f3642ed00b406874f364
32d10b41687440e1fc311a521951103208ee338fe51f2ed00b4009ee01882d8f
e51f2cd00b400aee0188278fe51f2ad483600b400bee20d428d00b40090028d1
10301b8fe51f27d424d00b4009000188148fe51f24d140e0fc30181000e11a10
f3656875f36421d10b41607440e3fc333a52385110320cee028de51f42ae0900
a36435a0836080008c33018c5c33018c4800018c4833018c6600018c5000018c
f2830070f38300708400018c3033018c7200018c7a00018c0000803f00000040
010004008005018c010024008605018c8a00018c9800018c01000c006805018c
000080bf01000080785634127605018c0b40090044d800e1122844d10b410900
82627e9110320dee088fe51ff36440d00b4068740788138f00eee51ff2ad0900
f0ade51feeade51fecade51feaade51fe8ade51fe6ade51fe4ade51fe2ade51f
0eeedfade51f33d9926833d10b41090064e1122931d120e22221136230d12260
20c8018f1041fa8b2ed00b40090029d182212ad120e2222103619c7102e22631
29011c31d8ad1f1f03a0081f01a0081f081f25d1126425d125d22363136600e0
20e73365283540755026017600231047f78f01731cd31fd77223dc7300e77223
1dd7122704772227047710e662271997722323651075136000eee71f01e808a0
10e3d6af081fd4af081fd2af081f1043248924666c6604677c677036f789f6af
871f8001115409004440018c2c05018c4005018cc8805fa00c06018c00695fa0
80841e003c06018c4000a0ff9040018c7040018c018200001000a0ff6ed22062
282203890192230209005a166bd2226210711032228df75ee82e018f03eee71f
67d268d112220171111267d100e332213111321133113411351164d732275fd3
2223136504731223047304e66223a893322710715bd004e813a004e35cd11261
5031d98ff75e5bd112611821d48ff75e56d1126002c8d38fe82eceaf09001043
0789f75ee82efa8f56660036f789f6af871f4dd334533823048ff75e47d33263
30322589e82e2a8d05ee00e247d122212471422148d149d33b2149d3222349d2
49d72227326320331b8d00e244d3222341d3222345d222213263203301ee248f
ea1f126241d110321b8ff3611fa0787137d222621032d58ff75ed7af00e2d4af
e71f726337d22033ffe22a622a1f00e233d3222330d3222334d2222132632033
df89fa5eeb6102711a1ff3617871399221213890118158e012810fe013813390
1481329015812ad100e220211871a0e2202128d228d1206008c8018f1041fa8b
24d1106008c81a8d09eef362787223d306e1256771231041fb8b21d10fe22221
20d1139222210471f072222100e11ed30d940d950d961dd80c994aa000e2ecaf
e61f314420010002000383001f0fff0077772c01a10f09008040018c1000a0ff
6840018c0100feca5040018c1c00a0ff1400a0ff1800a0ff4c40018c000000e0
000014a50df0ad0b000014e52143341284705fa018705fa0a086010080705fa0
002870a0402070a0000081a04b1714060a071360783001400c37f5e00d479707
1a0013670837d59eec3771230172027361714632ec8f85315123017202736032
f78f617100e16cd21222047212220472c193322204721fe332220472bc933222
04721222047212220472122263d1b4922221047160e2222161d100e0ae9500e6
ad97ad935fd25630d62f019d230df66d2414612101707030f58f027100e15ad2
12220472122204729993322204721fe332220472909332220472122204721222
0472122204728c933222047248e3322288924ed3222304732223047322230473
2223047322234ad212220472122249d17992222148d600e7769048d475987593
73620922236106e55d412c311c312c3145310a021365283501455c3219420942
87021a022831629eec31112601771043e68f027600e13ad21222047212220472
4d93322204721fe3322204724493322204724d933222047212220472122231d1
3b922221047160e22221d87141922221f65007e11d401fcb40e2fc32061200ee
eb1fee1fed1fffeeec1f00eee91f4ca700e8188d5a884d8f648823d12a922221
019023008360ac1220d10b4102e4ffa109001ed10b4103e4faa109001bd10b41
04e4f5a109001ad115922221019023008360801230f800011f3c1f0fff070010
70170f0f00190242ff0fcf07011019fc00780342e003e07f040070a0240070a0
000082a090e80000840070a0ac0070a0c00070a0800070a0000083a06b6f4606
040170a0240170a01c985fa0e405018c10905fa002890c911038138b06d107d2
222183606488178b05d10392222113a00900c8001f7c0900000070a001c20000
1c9c5fa0e79110380389019023008360cc1173d173d2222173d174dc122c74d1
126340e2fc32331272dee2644412c265551201e2222120e1122e6fd1122c6fd1
6fd612266fd712276fd170d0122070d1141f131f00e9921f911f6ed2222f6edd
ba9700e66dd50b4d00e46ddbb41fb31f921f911f6bd1122f6bd700e667d50b4d
00e46ada922a6ad392236ad492246ad592256ad692266ad792276ad092206ad1
9221830affe369d2322210e1122e68d1122c68d152d4122452d5122552d753d6
7226b41fb31f921f911f52dee22f62d700e652d50b4d00e4922a55d0922055d1
922155d2922255d3922355d4922455d5922555d69226830affee54d7e22757d1
12611821018b5ca101e255d1126177e22631028f01717ba1090051d2122251d1
12600820018bd9a1090009e11630018b1ca20a8801704bd102212dd14ce0fe04
4221047150e0fe055221147154e0fe066221087144d22221047144d2222144d1
11600d6043d111611f88028f1d6114a2090041d641d240e1236740e361271043
fc8f027729901041f68f0c322691163829023bd1088f222119d13ad222211e91
1038018b38d1106118d117d2222134d112611821018902a2ffe718de33dcc41f
13d1131f32dbb21f32ddd11f11daa22f11d961a0ffe7a0000080000103010601
000070a0018200000000200060805fa048805fa04c805fa00000700100007f00
68805fa06c805fa00000008044815fa0000000430000003fd40e018c00008020
000080429a99193fff0000ff000000e0040000e0080000e00c0000e0100000e0
140000e0180000e01c0000e014805fa00000740100003f0000ff00ff2480018c
2080018c1880018c00007f020000df01140a70a4c80a70a400f80000804070a4
2880018c0000c700010071a00000dc4200008c420000004200e6c3940b49e365
c41f61d1131fb21f60d1111fa22f60d760d5b7940b4900e6c41f5fd1131fb21f
5ed1111fa22fffe75dd6ac940b49e3655cd1141f5cd1131f5cd1121fd11fa22f
ffe700e65ad50b4900e45ad1141f5ad1131f5ad1121f5ad1111fa22fffe759d6
59d50b4908e459d159d2222159d25ad332220472e222047200e33222047257d3
3222047232220472322204723222830100e048dd52dc13634edb52da52d953d4
00e253d563a104e11638018b51a7836050d151d2222151d1ffe2222150d10b41
090050d110600fc90688018beea409004dd1126118211f894cd1126118211b8f
0820028d09e1b1a501e240e6fc361e161f1647d1126004e700e600e5f3640b40
787478e0fe011821028d01e241d1222141d2226101711222cda483603fd12cae
09003fd122213fd2222c32d132d22221b41fb31f921f911f2bd1122f3ad700e6
3ad50b4d00e4922a22d292220472922204729222047292220472922204729222
04729222830a25d1ffe2222187ae09002fd111611d612fd00031f7892ed101e2
7dae2221800088000000304300001043ffffff80000090800000904300004043
0002003000005c420000c0420000f0410000002000002f43000096430000fa42
00007a4300000e0c24008020000000e020000080040000e0000000c00000803f
000043430c0000e00000003f100000e0180000e044815fa00000008014805fa0
8c05018c8c705fa01080018c0880018cbc00008c0080018c0c80018c00002000
2480018c00007801ff00ffff00008020280a78a41ff800001c80018c54daa26c
54d1cb21122a54d110e22221147153d2222153d153d212220472122252d153d2
222153de53dbb41f53d1131f00e9921f911f52d1122f52dd869700e6e3650b4d
00e4b41fb31f921f911f4ed1122f4ed700e6e3650b4d00e44cd192214cd29222
047292220472922204729222047292220472922204729222830146d1ffe22221
c22a45d101e22221e7ad0900fc8b43d111600d60407111611f88078d1d6140d1
01e222213cd10be2d7ad22214d922c313cd33821f689f2af090046977c3139de
e821068b36d112611821058936d6e1ad090035d6dead09003896dbad090033d1
141f33d1131f33d1121f33d1111f33d1122f00e61ed522d10b4100e4edad0900
29071ceeed473b27722340e7fc377357722b2bd76227922a22240c77222729de
e2250877222783031041518d017002c840e6fc36d3160089c31601c822d6df8d
038822d6ddaf290700802004e0070900f4805fa0000001004c805fa000007c01
00003f0068805fa044815fa0000000800000802000008042000000430000003f
d40e018c9a99193fff0000ff000000e0040000e014805fa01880018c200a7ca4
1c80018cdfff000000f800000000484300809f4300007042000052436666663f
080000e00000803f0000574300006b4385daa41f85d1131f85d9921f85d1111f
85dee22fffe785d685d586d00b4008e4a41f85d1131f921f84d1111fe22fffe7
83d684d57fd10b4108e483da83d4422a83dd84d2222d84db84d1122b84dc85d6
622c00e984d3922384d5922584d7922784d09220830ab22a83d1122d83d7722b
e22c92239225ffe2087322239220830ab22a122d7ed3322be22cfc7592257dd1
f87012200875222508709220830ab22a79d0022d722be22cf875122504759225
0475222504759225830a74d5522a022d322be22c68d012200470122004702220
04709220830a422a5ed4422d6cd4422b622c61d69226f870922061d492240c76
9226830ab22a67d6622d722be22cfc709220fc7492240870222008749224830a
b22a622d322be22c53d69226fc701220fc7422240c769226830ab22a5ad6622d
722be22c4cd712279220222408709220830a522a622d322be22c122747d31223
22249220830a51d2241f131f621f50d1111fe22fffe737d5559432de0b4e00e6
4cd1122a37d0022d32d1122b4ad1122c30d339d232222ed538d4522438d69226
38d79227830a00e300e2c36b636affe9736421a004e5236740d141dc236641dd
db2725dd722d26de022e27d0c2201ad7722b29dc122c29d76227922a2224830d
122d622e9220222b222c2227222a2224830d10456c8d017302e1336002c8028d
3921cea401c801c801898ba403882ed01821d08f13672adcd1af13662ad027d1
2adcccaf1366800000006b430000f04100005743000020410000003f00c00034
00208020d40e018c00005c4200000c4200c0003600008020000000e008000080
040000e0000000c0080000e0002480200c0000e000c80088100000e0140000e0
180000e01c0000e00000f0420000e041000050420000004300002043080000f0
0004802000002443000040430000604300008042c8000080000200300000803f
00005643c80000e00000484300006c43f291122f30e779d679d57ade0b4e00e4
79d1141f79d0031f79d1121f79d1111f79d1122f79dbffe771d5de940b4b00e6
d36a00e9922d047d922df87c922c74d2922274d3922374d4922474d5922574d6
9226830a73dee11f73d7722f73d774d674d575d00b4000e4e11f6fd1122f73d7
6fd6636570d20b4200e4e11f70d1122f70d771d671d56cd30b4300e470d1122a
922d922c5ed4922402e25ed5222506e15dd612265dd722275dd01220830ae11f
66d168d768d669d569d45fd20b42122f922a922d922c52d3922352d4922452d5
922552d6922652d79227830a61dee41f61d1131f61dee21f61d0011f46d1122f
60d661d561d40b4bffe75ad2241f60d1131fe21f4bd3311f3fd4422f5dd65ad5
5ad40b4bffe7922a922d922c3cd592253cd692263cd792273cde922e3cd09220
830a55dee41f4ed1131f54d2221f54d3311f54d4422f54d754d555d40b4b00e6
e41f54dee31f4dd5521f53d6611f53d7722f53d74dd54ed40b4b00e63d90022f
50d64ad54ad41fd10b4110e7922a922d922c23d2922223d3922323d4922423d5
922523d69226830a47d148d2222148d1141f48d1131f48d1121f48d1111f48d1
122f48d700e60ed50b4b00e422d7741f45d1131fe21f45d1111f0fd0022f44d7
44d50a940b4b00e6922a922d922c0cd192210cd280a0090000018000302010ff
00008020f00b018c0000c042000091430000a842000066430000003fd40e018c
0c0000e0100000e0140000e0180000e01c0000e00000403f0000c842286b6e4e
0000a04200007a43a40d018c0000704300006f43000074430000524300005c43
000000200000004300004443000080420000020000005c42000068430000f041
0000484300c40030000090200800000400008d4300c6003000002a4300000243
00000c439a99193fff0000800000909400000002000034430000f0429a99993e
0000ff801020308060815fa0000000800000d84200008c420000be4200002042
3333333fffff00ff0000964300008043ffffff8000009080922276d3922376d4
922476d59225830a75d6622f75d776d676d577d477d00b40090071d176d777d6
77d578d473d20b42122f77d3341f77d4431fe21f76d5511f76d6622f76d777d5
77d40b4b00e670d7741fe31fe21f75dee11f75d0022f75d770d571d40b4b00e6
922a922d922c72d1922172d2922259d3922359d4922459d59225830a6ed1ffe2
2221a4911038018938ab09006bd26cd1226001c8018d1041fa8b6ad16ad22221
6ad16bd2222104716ad2222104716ad2222104715ad22221047168d2222168d3
68d220e1222301721041fb8f047366d166d22221147101e22221136258d12260
01c8018d1041fa8b0bab090060d222610171122283603c88028f428808a10900
048ffb5ee82e018b07a1090059d10b41090059d10b4110e458d1126283639c73
56911633028ff95105a109002831fc5e163e008b1c1ffd5e123e00891d1ffe5e
1c3eee1f291f00e148e0fe022822038d1821018961a10900028d3fe151a1fd52
1638018b01a18360017883603c88028f3ce1c3a809001638018baaa846881e88
028f2d88b0a80900028f0f88b1a809000189f3a183603ad10b4101e483620842
2c3208428c32184209428c321191192283603fc9036108410c31184131d33c31
31d321211043fc8f027197aa090096009500ff7f140000e0180000e01c0000e0
6666663f0000d442000082420000c24200003442840e018c00004d4300009143
0000394300008743000052430000484300000c439a99193fff00008000009094
000000020000f0429a99993e0000ff800c0000e0100000e014805fa0186c5fa0
80841e0000e100ac7856341200e000ac2200008000e1000c0c01002200000065
14e000ac0001dec0046c5fa000e0000c1080018c0c06018c4c06018c0c00d8ff
e405018c000000a500a0000083d1222100e183d210220c720ae3302204721022
80d1a0e2202180d280d1206008c8018f1041fa8b7cd1106008c8238d13e26871
212100e221210ae3312121212121212175d276d1206008c8018f1041fa8b72d1
106008c811896871116211601162116211616cd220620fc918401c610b216cd2
f8ae12226bd1faaf09006ad1f7af090069d00b4000e404a00b1f67d00b4001e4
0b1f66d10b41090065d10b4110e465d1126208af291faa9110381f8ff55ee82e
1c8961d1a493322160d1ec31291f60d2122260d112611821078d836022625ed1
1032038f01c8d7a00ae201c8018bf6a009005ad15ad21222f7ae017887911038
d78fce71fd53fc5ee8331633268dfe5e54d3ec337d911633268d44e0fe000820
278df65e48d175933221291ffe5e4dd2ec326e9116325e8d44e0fe0008205d8f
f65ee82e5d8f48e0fe0008205c8fff5ee82e278df85044d1b9afec313ad15a93
322142d1b3af291f37d155933221ddaf291fe82e0e8d58e033d1fe000221291f
fd52fc5ee8324491163238d19f8dfe5ecdaf0900291f97ae01e12bd13d922221
efaffd520820038df75e31d18faf0c31e82e02892fd18aafec31fa5ee82e0289
2dd184afec31fb5ee82e038d40e02bd17dafec3101e1fe021732038f40e028d1
75af2c31fe00018802891bd16faf090024d16caf090024d169af090023d166af
090023d163af090022d160af0900fa00e003c8001f7c007cff03007e0880018c
84705fa09c705fa018705fa0a08601000480018cffff0000dc07018c0c06018c
4c06018c0c00d8ff10905fa00001d0ba4840018c1080018c0d600d6000004000
50805fa043c721fe0008d0ba0200d0ba0009d0ba000ad0ba000bd0ba000dd0ba
0007d0ba4d4d0d600300d0ba0400d0ba0500d0ba0600d0ba5bd11261c9712631
12895ad112611821138959d11262a9911032028957d108a0090057d112611821
0a8956d101a0090055d156d212220caf836055d1f9af090054d1f6af090054d1
08af090029071ce61821028d6d4775ab090050d050dc51d641ab090003c90388
0189b1a83fe13fe11638028d836006ae836201c8018be1a8090049d1019c230c
090018ee47d222621071203102ee068fe71f45d11261503102ee048de71f0192
230209009ce9019123010900dae93360038829071ce11d473cd038d136dc0eab
1366f48f182139d033ab09004121017002715630058f20c8d62f019d230df66d
d2ebf38f2364f1af336401a093628362212101700271a630f78f0388f78d4630
2c8f66302c8b312101705888f38f027127d12892222127d227d1292127d33b21
13662367e07726d518e352271043fc8f047724d30ce77223fc7310e7722322d7
08e3722101771043fb8f047183061ed700e101e60195230508e394dec8af5362
c6af7362280680000c80018c0880018c0480018c030cd0ba0080018c040cd0ba
010cd0ba4840018c020cd0ba9d5a0d60000020000000484300006c430000803f
000040001000a0ff1400a0ff000070431c815fa0e040018ce0ffff03000000e0
111111113c0000ffe0ffc000400000006400000000000000400100000e000000
00000000100000000a0000000000000001000400000004000300040001000c00
0100240001000400010000000200000000010000000200000303000000017f80
ff000000000000000100000002000000ffffff7f0000008001000080ffffffff
78563412efbeadde000001005345474120534547414b4154414e412000000000
0000000017b7d1380000000000000000ffffffff000020440000000017b7d138
0000803f00000000ffffffff000000000000f04317b7d138000000000000803f
ffffffff
""")
# The same program built with -DLIVE_MMU_ALIGN: its MMU test also asks for
# the address errors a misaligned access raises (live_prog.c). For a core
# that keeps translations in a table, which they all do: it is the build
# headless.sh takes.
PROGRAM_MMU_ALIGN = bytes.fromhex("""
01df02d02b40090000f0008c2c0f018c020005d119206b200e40543402004227
01170b0009000900fefcffff020005d119205b200e4044340200422601160b00
09000900fefcffff1b4429000b0009000344422642605a200224074402000116
42160b00090002000b0009000e440b0009006a446a000b00090066446a004225
0b0009006a000b000900020101e00b000e4100e00b000900034f01e00b00074f
00e00b0009000900000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000004d105d002600221420002704e402b00090009004440018c
240000ff00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000016d0026116d229211ad208e522633031128908721045f98b
13d33031068913d3392113d33b210be402a009000dd10ae411d33b2103a00900
215109e45834111004510ed33921184408444b2114100cd22263017332223800
2b000900000000ff00f0ffff00000010000000e000f0ff000000000c0040018c
76010000ff03ffff4040018c220203d12e41fdff2e420b0009000900a800018c
8df09df19df29df39df49df59df69df7830410f020f030f040f050f060f070f0
3df05a000b0009005a440df24df21df25a000b00090048f44cf55af50b000900
48f00b0009000af40b0009000dd10ed2222104710dd2222104710dd222210471
0cd2222101e10cd212220cd200e3322204721222f0720ad33222147212220b00
0900090000e000ac0100008000e1000c0920000100000001e86c5fa0106c5fa0
00e0000c43631843436128411b234b23136418444b2304d210e132221041fc8f
04720b0009000900000000a409d112610f92292108d307d42365336242661367
636159217231028b10431042f68b0b000900ff030c815fa080841e0002d11260
01910b001920ff030c815fa0862f962f224f436804d90b4909008230fb8b264f
f6690b00f66809003c06018cf47ff361319221214d6229444c602d9323673927
7b2011812c60128100e013815d6229455c6029233b2014812c6015810fd101e2
20211871a0e220210dd20ed1206008c8018f1041fa8b0ad1106008c80989f362
09d706e1256331271041fb8f01e00b000c7ffcaf00e0302000ff090084705fa0
18705fa0a086010080705fa027d100e220210c71602163621942047120210871
a0e2202122d223d1206008c8018f1041fa8b1fd1106008c8348d06e11ed34562
21231041fb8b1ad21ad1206008c8018f1041fa8b16d1106008c8258d68261d8d
536400e014d70174180063610a3101416362017202e33232078d017105a001e1
194224041041098d027071622d62036301736233f48f2405f5af104107d11061
0b0001e00b0000e00b0000e084705fa018705fa0a086010080705fa09c705fa0
862f962fa62fb62f224f907f43680ae6f36572d472d00b400c750820018bbba0
09e0fc840fc903886c8f01e0f3600c7002840188668f01e0f3600c7003840288
608f01e0f3620c7225840c63284326840c6118613b2127840c600b21b9931c33
b8922633018b9ea001e08828488d83605cd222621032018b97a002e00ee6f365
59d457d00b400c750820018b8fa009e0f3600c700184118801898aa003e0f360
0c7004840188018985a003e0f3600c7005840288018980a003e0f3620c722b84
0c6328432c840c6118613b212d840c622b217e922c317d922631018b6fa003e0
64e6f36541d43ed00b400c750820688df365f36a107af36800eb6c9414a00ce9
38d2122248a0090010420a8d0177346040c8f98d7b6043610c416f841b20f3af
6f801049088d087ab0280178a36300e78366f076ebaf08e200e12dd64c940ca0
0ae01c311042068dff736821f9891c314a21f7af1d611040068954622c621842
2a217363f1af7362f06001882b8bf36001840288298b1fd22a21f362fa840c62
136319433032228ff3622b840c621c611032ffe00a600840707f264ff66bf66a
f6690b00f668f7af0900f5af0900f3af0900f1af0900efaf0900edaf0900ebaf
0900e9af09e0e7af04e0e5af04e0e3af04e0a8fd2b01800021100900e831018c
ec06018c1480018cdc31018cd031018c00800000ffff00000ad1422104715221
01e109d21222087212220472122207d1226001c8018d1041fa8b05d1126001c8
0b00290004745fa00c745fa000093d0018745fa0626113671947014725922821
ffe22a62436300432903136001402444136019407a2001c8108943605c302a23
063429073a2773611841236318433c333b21203729022b210b00122643605830
2a2346302907eeaf3a2700027ed112627ed11032048d00e27dd122210b0000e0
7cd17dd212227dd2215210320189d9a011e07bd112600188028d11e00b000900
78d379d13111047178d2292178d679d77216d1921b22231672623032028d00e3
c2a012e074d23222736301e772232263c39220330189b9a013e06bd2215369d2
2033db8f13e06dd26dd331126dd366d733176dd773126dd22616af921b222716
6bd222623032c98f16e06ad25fd33922a4932b23371656d305e7722364d33267
61d33037018993a017e063d360d732275ad77357303701898ca018e052d33357
58d33037aa8f18e05cd7781687977b2119165bd101e332215ad1126351d11033
9c8f19e055d338167b22291654d102e2222154d1126250d110320189a8a01ae0
4fd100e2222150d112613cd337d2222338d771131263203301899ba01be07111
3dd200e33222136302733267226757922037018990a01ce037d200e772221367
0177716722674b922037018986a01de031d200e772223dd77223226341922033
01897da01ee025d2226320d22033018978a01ee021d221531ed22033018973a0
1ee025d300e22223136203722a977122326326922033698b18d2226313d22033
668b16d2215313d22033638f00e31ad2322218933c3111612262119110325b8b
0b0001e00b0009000b0009000b0009000b0009000b0009001601c00036013401
e0000001addeff0f0000001044332211100000ff88776655040000100050018c
4040018c5555aaaafc5f018c00f0ff1f0040018c001000104440018cfc6f018c
0df0ad0bb0b0b0b0c0c0c0c000300010083000100070018cc1c1c1c100400010
000000ff08400010a832018cefbeadde0b0009000b0009000b0009000b000900
0b0009000b0009000b0009000b001fe00b001fe00b001fe00b0020e0862f962f
f45110d2222210d8422810d0522010d4122410d5622510d6722610d7122710d3
f25992238302f3599222122800e11220122412251226122712238302f6690b00
f6680900000000e0040000e0080000e00c0000e0100000e0140000e0180000e0
1c0000e0862f962fa62fb62fc62fd62fe62f224ff07f536b636a7369fd5e2ad1
1b24431f29dd422d00e829d1822129d282220871822108728222087182210872
822208718221830de21f611f722f22dcfc575366a3650b4cb364e21ffc52211f
922f2367b366a3650b4c93641bdee21fa11f922ffc57b366a3650b4cb364f351
122d17d112d2122212d182210872822208718221087282220871822108728222
830de21ffc51111f922f1367b366a3650b4c9364107f264ff66ef66df66cf66b
f66af6690b00f66800000081000000e0040000e0080000e0bc0c018c0000803e
00000024224ff87ff351111f722f6367536643650cd10b4100e40cd200e11222
0bd312230473122304731223047312230473122304731223047312238302087f
264f0b0009000900240d018c000000e0040000e0862f962fa62fb62fc62fd62f
e62ff75cf85bf95e24d14b2124d2122224da25d1122a25d9522925d8622825d0
00e1122024d5122524d6122624d312238302436d2b2dd222b22ae229c2281220
1225722612238302d222b22afb5bb229c22812201bdbb225722612238302d222
fa5dd22ae229c228b220122572261223830215dddb244222fa54422afb5dd229
c228b220b225722612238302f66ef66df66cf66bf66af6690b00f66800000080
000000e0040000e0000000c0080000e00c0000e0100000e0140000e0180000e0
1c0000e00000803f000000f0862f962fa62fb62fc62fd62fe62f224fbc7fc07f
9bd112619bd22665266622679ad2266322625b216b217b213b212b2144e0160f
96d11060fec90021ffe295d322230473222300e204732123106001cb002191d1
126091d3392005cb022118718fd33221f471222110718ed222216c718dd22221
9c718dd2222104718cd2222110718cd222218cd18cd212228cd212228cd18dd2
22218dd600e38dd88dd412e745330a02094223611c3113652c355c3533695839
53609c3008408e01122601731047ed8f047684d184d2222184d185d222210471
84d22221047184d2222184d1c59222210471c392222104711fe222210471be92
22217fd27fd310e132221041fc8f04727dd1b59222213c717cd2222108710772
22217bd27bd3ac9132221041fc8f047279d17ad77ad310e27221a3961c363226
1042f98f047177d177d2222104719a92222176d276d310e132221041fc8f0472
1fe174d2122274d2122274d100e002ea00e973d807e41fe58697869317e6d62f
019d230df66d54201043058d017726657035f989f8af63616ad227536ad22033
648d48e001e1160f10e168d212220472122267d267d30ce132221041fc8f0472
00e163d212220472122263d163d2222163d164d2222164d12e4164d1ffe700e3
08e2722131111042fb8f08715fd360d1122360d260d1292148977b2111135fd1
122200e111125ed212225ed212225ed105e222215dd00b40090040e7fc370017
5bd1eee2339320215ad71c3720275ad71c37202759d71c3720271043f38f0171
57d458d00b4005e5082001ee028de61fb4a0090054d00b40090054d454d10b41
092454dcc36dc51fbda200ee52d2205335d22033978996af01e1007ce003ff7f
8001800000101f7ce00700f836010048846c5fa0f46c5fa0c0785fa00400d8ff
0800d8ff44805fa0000080003f7d1700000020000401150000007f020000df01
77df27000000100020805fa028815fa08c805fa0000000030c0010a56032018c
abaaaaaa88805fa017b7d138000010a500000002000080200000003004905fa0
001000a40303030374805fa000ff000000825fa080800000002006a405050505
0606060614905fa01ffc0000000006a4070707071c985fa01c9c5fa0004006a4
ffff0000c040018c11111111380000ff000018a500000080180018a54c0e00a0
2c805fa000001800a800018c0040018c000000100050018c00f0ff1f44332211
4040018c000000ff100000ff2c0a018c000023ac0000ffff0000feff0000fdff
5eb000006c06018c6600018cff7fffff6c00018c2832018c0041018cbd9562d4
62d00b4009000820028fe61f42af09005fd460d00b4005e50820018ba3a002ee
5dd8ab9b59da5dd9b3650b4a83640820018b9aa002eea1900c389038f58fb365
53d454d00b4008e50820018b8fa003ee959553d44dd00b4009000820028f10e1
87a003ee4fd650d220677c6764633c633037028d10417ea004eef58f01724bd1
7b9210677c674ad31c3330633c633037028d1042a8a005eef38f017145d16c92
10677c6744d31c3330633c633037028d10429ba006eef38f017135d435d00b40
02e50820018b93a008ee3cd13cd2222104715592222101e13ad2122208721222
0472122238d1226001c8018d1041fa8b36d1126001c8028ffc717ba009ee00e2
22210471126001c8018975a00aee30d1379202a009000c8d017110677c672dd3
1c3330633c633037f58d10420beeb1aee61f29d110611c61249220315e8f0cee
26d110611c6120315a8f07ee24d110611c612031568b23d110611c612031538b
00ee97aee61f95aee61f93aee61f91aee61f8faee61f8daee61f002800040040
00180010ee0009000000200c9809018c5eb000006c06018c0000210c0028210c
0000220c5032018c000020ac000021ac0000ffff000022ac0000feff04745fa0
0000230c0c745fa0801a060018745fa0000023ac0000fdff001023ac002820ac
002821ac004022ac54aee61f52aee61f50aee61f4eaee61f4caee61f4aaee61f
48aee61f46aee61f44aee61f017993600888038f936800a1017e936807e00d48
46911928936001c90b2870e0860fd26af553326bf3667076b3651ed70b47a364
071ff36778778366b3651bd00b40a36440e2fc322e51f7501030318f70e02f51
27922921fe022031028de82ed1a001eecc8ff366860f7076a3650ed70b47a364
036bf366787683650cd00b40a36440e2fc322e51103b0189bda002ee2f510893
39212c522031b28d017902ee0aa0e51f00030103d409018c1000018c2c00018c
01eee51f59d10b4100e859d00b400900036158d956db0b4b136aa230058f0361
a030ffe22a381049f58b63e1163801ee028fef1f07a209004fd850d1122850d1
0b41090082624fd34ad1326001c8018d1041fa8b4bd11261136001c9081f1360
01c8018910a202e043d1126343d11033018b0ba203e040d1126040d11032038d
ff88018904a201e03bd11260ff885e893ad222213cd13dd2222104713cd22221
0471629222213bd13bd22221147101e2222113622fd1226001c8018d1041fa8b
2dd112611c6113600688018909a204e029d22260294019403088028d747202a2
04e022632dd220330189fea105e022d222d3322224d22ad33222047224d33222
047228d33222047227d33222047227d3322227d727d320e2322701731042fb8f
04771cd21cd33222147201e33222236310d2326001c8018d1042fa8b0ed22260
ff88048922600c6007880089181fa0a1090057afe51f55afe51ff5500470051f
e3600a882889f8ae00e902200c06018c3c06018c80841e0000e100ac78563412
8c05018c186c5fa000e000ac0000008000e1000c046c5fa000e0000c56657273
220000800c010022000000020000006414e000ac0000dec0047d73d1103d0189
12adc51f71d8836c057cf36a547a70db84600c69ab80f3640b4b5f74036168e0
982929022031028d160f19a103eeab840c61c8909b201030028dc03812a103ee
e68b64d8836e147e63dd64dc64db65da0b4d0900051f8669f36678769365f364
0b4c747440e3fc333e52f361707110320189f9a004eef3617471a490fe021032
0189f3a004ee3c52f5512a219a21b9213f533a22a9222b211821028de038e7a0
04eed58b50d00b40f36b036a4fd9936e187e4fdd6c7b4fdc96680b4d83640038
028d02e0d6a005ee0a2868e0860fb365f3640b4c68740038028d40e2cca006ee
fc322b51b031028d903ec7a006eee38b41d1181241d1191241d93dd80b489364
40dbf3640b4b60743fd40b4807eef3640b4b64740b489364f3643cd10b416874
40e7fc377a5278511032478fe51f36d11a17f3656c75f3642ed00b406874f364
32d10b41687440e1fc311a521951103208ee338fe51f2ed00b4009ee01882d8f
e51f2cd00b400aee0188278fe51f2ad483600b400bee20d428d00b40090028d1
10301b8fe51f27d424d00b4009000188148fe51f24d140e0fc30181000e11a10
f3656875f36421d10b41607440e3fc333a52385110320cee028de51f42ae0900
a36435a0836080005032018c2032018c4800018c0c32018c6600018c5000018c
f2830070f38300708400018cf431018c7200018c7a00018c0000803f00000040
010004008005018c010024008605018c8a00018c9800018c01000c006805018c
000080bf01000080785634127605018c0b40090044d800e1122844d10b410900
82627e9110320dee088fe51ff36440d00b4068740788138f00eee51ff2ad0900
f0ade51feeade51fecade51feaade51fe8ade51fe6ade51fe4ade51fe2ade51f
0eeedfade51f33d9926833d10b41090064e1122931d120e22221136230d12260
20c8018f1041fa8b2ed00b40090029d182212ad120e2222103619c7102e22631
29011c31d8ad1f1f03a0081f01a0081f081f25d1126425d125d22363136600e0
20e73365283540755026017600231047f78f01731cd31fd77223dc7300e77223
1dd7122704772227047710e662271997722323651075136000eee71f01e808a0
10e3d6af081fd4af081fd2af081f1043248924666c6604677c677036f789f6af
871f8001115409004440018c2c05018c4005018cc8805fa00c06018c00695fa0
80841e003c06018c4000a0ff9040018c7040018c018200001000a0ff6ed22062
282203890192230209009e156bd2226210711032228df75ee82e018f03eee71f
67d268d112220171111267d100e332213111321133113411351164d732275fd3
2223136504731223047304e66223a893322710715bd004e813a004e35cd11261
5031d98ff75e5bd112611821d48ff75e56d1126002c8d38fe82eceaf09001043
0789f75ee82efa8f56660036f789f6af871f4dd334533823048ff75e47d33263
30322589e82e2a8d05ee00e247d122212471422148d149d33b2149d3222349d2
49d72227326320331b8d00e244d3222341d3222345d222213263203301ee248f
ea1f126241d110321b8ff3611fa0787137d222621032d58ff75ed7af00e2d4af
e71f726337d22033ffe22a622a1f00e233d3222330d3222334d2222132632033
df89fa5eeb6102711a1ff3617871399221213890118158e012810fe013813390
1481329015812ad100e220211871a0e2202128d228d1206008c8018f1041fa8b
24d1106008c81a8d09eef362787223d306e1256771231041fb8b21d10fe22221
20d1139222210471f072222100e11ed30d940d950d961dd80c994aa000e2ecaf
e61f314420010002000383001f0fff0077772c01a10f09008040018c1000a0ff
6840018c0100feca5040018c1c00a0ff1400a0ff1800a0ff4c40018c000000e0
000014a50df0ad0b000014e52143341284705fa018705fa0a086010080705fa0
002870a0402070a0000081a04b1714060a071360783001400c37f5e00d479707
1a0013670837d59eec3771230172027361714632ec8f85315123017202736032
f78f617100e16cd21222047212220472c193322204721fe332220472bc933222
04721222047212220472122263d1b4922221047160e2222161d100e0ae9500e6
ad97ad935fd25630d62f019d230df66d6813612101707030f58f027100e15ad2
12220472122204729993322204721fe332220472909332220472122204721222
0472122204728c933222047248e3322288924ed3222304732223047322230473
2223047322234ad212220472122249d17992222148d600e7769048d475987593
73620922236106e55d412c311c312c3145310a021365283501455c3219420942
87021a022831629eec31112601771043e68f027600e13ad21222047212220472
4d93322204721fe3322204724493322204724d933222047212220472122231d1
3b922221047160e22221d87141922221f65007e11d401fcb40e2fc32061200ee
eb1fee1fed1fffeeec1f00eee91f42a700e8188d5a884d8f648823d12a922221
019023008360f01120d10b4102e4ffa109001ed10b4103e4faa109001bd10b41
04e4f5a109001ad115922221019023008360c41130f800011f3c1f0fff070010
70170f0f00190242ff0fcf07011019fc00780342e003e07f040070a0240070a0
000082a090e80000840070a0ac0070a0c00070a0800070a0000083a06b6f4606
040170a0240170a01c985fa0e405018c10905fa002890c911038138b06d107d2
222183606488178b05d10392222113a00900c8001f7c0900000070a001c20000
1c9c5fa0e79110380389019023008360101173d173d2222173d174dc122c74d1
126340e2fc32331272dee2644412c265551201e2222120e1122e6fd1122c6fd1
6fd612266fd712276fd170d0122070d1141f131f00e9921f911f6ed2222f6edd
ba9700e66dd50b4d00e46ddbb41fb31f921f911f6bd1122f6bd700e667d50b4d
00e46ada922a6ad392236ad492246ad592256ad692266ad792276ad092206ad1
9221830affe369d2322210e1122e68d1122c68d152d4122452d5122552d753d6
7226b41fb31f921f911f52dee22f62d700e652d50b4d00e4922a55d0922055d1
922155d2922255d3922355d4922455d5922555d69226830affee54d7e22757d1
12611821018b5ca101e255d1126177e22631028f01717ba1090051d2122251d1
12600820018bd9a1090009e11630018b1ca20a8801704bd102212dd14ce0fe04
4221047150e0fe055221147154e0fe066221087144d22221047144d2222144d1
11600d6043d111611f88028f1d6114a2090041d641d240e1236740e361271043
fc8f027729901041f68f0c322691163829023bd1088f222119d13ad222211e91
1038018b38d1106118d117d2222134d112611821018902a2ffe718de33dcc41f
13d1131f32dbb21f32ddd11f11daa22f11d961a0ffe7a0000080000103010601
000070a0018200000000200060805fa048805fa04c805fa00000700100007f00
68805fa06c805fa00000008044815fa0000000430000003f540e018c00008020
000080429a99193fff0000ff000000e0040000e0080000e00c0000e0100000e0
140000e0180000e01c0000e014805fa00000740100003f0000ff00ff2480018c
2080018c1880018c00007f020000df01140a70a4c80a70a400f80000804070a4
2880018c0000c700010071a00000dc4200008c420000004200e6c3940b49e365
c41f61d1131fb21f60d1111fa22f60d760d5b7940b4900e6c41f5fd1131fb21f
5ed1111fa22fffe75dd6ac940b49e3655cd1141f5cd1131f5cd1121fd11fa22f
ffe700e65ad50b4900e45ad1141f5ad1131f5ad1121f5ad1111fa22fffe759d6
59d50b4908e459d159d2222159d25ad332220472e222047200e33222047257d3
3222047232220472322204723222830100e048dd52dc13634edb52da52d953d4
00e253d563a104e11638018bf3a6836050d151d2222151d1ffe2222150d10b41
090050d110600fc90688018be4a409004dd1126118211f894cd1126118211b8f
0820028d09e148a501e240e3fc331e131f1347d1126004e700e600e5f3640b40
787478e0fe011821028d01e241d1222141d2226101711222c3a483603fd12cae
09003fd122213fd2222c32d132d22221b41fb31f921f911f2bd1122f3ad700e6
3ad50b4d00e4922a22d292220472922204729222047292220472922204729222
04729222830a25d1ffe2222187ae09002fd111611d612fd00031f7892ed101e2
7dae2221800088000000304300001043ffffff80000090800000904300004043
0002003000005c420000c0420000f0410000002000002f43000096430000fa42
00007a4300000e0c24008020000000e020000080040000e0000000c00000803f
000043430c0000e00000003f100000e0180000e044815fa00000008014805fa0
8c05018c8c705fa01080018c0880018cbc00008c0080018c0c80018c00002000
2480018c00007801ff00ffff00008020280a78a41ff800001c80018c54daa26c
54d1cb21122a54d110e22221147153d2222153d153d212220472122252d153d2
222153de53dbb41f53d1131f00e9921f911f52d1122f52dd869700e6e3650b4d
00e4b41fb31f921f911f4ed1122f4ed700e6e3650b4d00e44cd192214cd29222
047292220472922204729222047292220472922204729222830146d1ffe22221
c22a45d101e22221e7ad0900fc8b43d111600d60407111611f88078d1d6140d1
01e222213cd10be2d7ad22214d922c313cd33821f689f2af090046977c3139de
e821068b36d112611821058936d6e1ad090035d6dead09003896dbad090033d1
141f33d1131f33d1121f33d1111f33d1122f00e61ed522d10b4100e4edad0900
29071ceeed473b27722340e7fc377357722b2bd76227922a22240c77222729de
e2250877222783031041518d017002c840e6fc36d3160089c31601c822d6df8d
038822d6ddaf290700802004e0070900f4805fa0000001004c805fa000007c01
00003f0068805fa044815fa0000000800000802000008042000000430000003f
540e018c9a99193fff0000ff000000e0040000e014805fa01880018c200a7ca4
1c80018cdfff000000f800000000484300809f4300007042000052436666663f
080000e00000803f0000574300006b4385daa41f85d1131f85d9921f85d1111f
85dee22fffe785d685d586d00b4008e4a41f85d1131f921f84d1111fe22fffe7
83d684d57fd10b4108e483da83d4422a83dd84d2222d84db84d1122b84dc85d6
622c00e984d3922384d5922584d7922784d09220830ab22a83d1122d83d7722b
e22c92239225ffe2087322239220830ab22a122d7ed3322be22cfc7592257dd1
f87012200875222508709220830ab22a79d0022d722be22cf875122504759225
0475222504759225830a74d5522a022d322be22c68d012200470122004702220
04709220830a422a5ed4422d6cd4422b622c61d69226f870922061d492240c76
9226830ab22a67d6622d722be22cfc709220fc7492240870222008749224830a
b22a622d322be22c53d69226fc701220fc7422240c769226830ab22a5ad6622d
722be22c4cd712279220222408709220830a522a622d322be22c122747d31223
22249220830a51d2241f131f621f50d1111fe22fffe737d5559432de0b4e00e6
4cd1122a37d0022d32d1122b4ad1122c30d339d232222ed538d4522438d69226
38d79227830a00e300e2c36b636affe9736421a004e5236740d141dc236641dd
db2725dd722d26de022e27d0c2201ad7722b29dc122c29d76227922a2224830d
122d622e9220222b222c2227222a2224830d10456c8d017302e1336002c8028d
392170a401c801c801892da403882ed01821d08f13672adcd1af13662ad027d1
2adcccaf1366800000006b430000f04100005743000020410000003f00c00034
00208020540e018c00005c4200000c4200c0003600008020000000e008000080
040000e0000000c0080000e0002480200c0000e000c80088100000e0140000e0
180000e01c0000e00000f0420000e041000050420000004300002043080000f0
0004802000002443000040430000604300008042c8000080000200300000803f
00005643c80000e00000484300006c43d36a00e9922de36d922e036c9220087e
922e0870922092279cd292229cd39223830a9cd59cdbb11f9cd1122f9cde9dd7
53660b4e00e4b11f9bd1122f9bd79cd69cd50b4e00e49cd1122a922d922c9bd4
922402e29ad5222506e19ad612268bd722278bd01220830ab11f92d196d797d6
97d598d40b4e122f922a922d922c8fd292228fd392238fd4922480d5922580d6
9226830a90d7741f90d1131f90dee21f90d0011f90dee22f90db91d691d592d4
0b4bffe788d1141f90d1131f88d2221f8fd1111fe22f8fd68ad58bd40b4bffe7
922a922d922c79d3922379d4922479d592256ad692266ad79227830a86d0041f
7cd1131f85d2221f85d3311f85d4422f85d786d586d40b4b00e67fd5541f85d6
631f7ed7721f84d0011f84d1122f84d77ed57fd40b4b00e6922a922d922c63d2
922263d3922363d4922454d5922554d69226830a7bd17cd222217cd1141f7cd1
131f7cd1121f7cd1111f7cd1122f7cd700e67cd50b4b00e451d7741f7ad1131f
6cd0021f79d1111fe22f79d779d582940b4b00e6922a922d922c4cd192214cd2
92224cd392233dd492243dd59225830a71d6622f71de72d772d673d573d40b4e
09006dd7722f72d772d673d573d40b4e09003bdee41f47d0031f56d1121f50d2
211f50d3322f50d750d551d40b4b00e6e41f50d4431f421f4fd5511f4fd6622f
4fd74ad54ad40b4b00e6922a922d922c2ed792272ede922e2ed092201fd19221
1fd29222830a5ed1ffe22221349110380189e3ab09005bd25bd1226001c8018d
1041fa8b59d15ad222215ad15ad2222104715ad22221047159d22221047134d2
2221047157d2222157d358d220e1222301721041fb8f047355d156d222211471
01e22221136248d1226001c8018d1041fa8bb6ab0900800096000900180000e0
1c0000e00000a0420000403f0000c842240d018c0000704300006f4300007443
0000524300005c43000000200c0000e0100000e0140000e00000004300004443
000080420000020000005c42000068430000f041000048430000003f540e018c
00c40030000090200800000400008d4300007a4300c6003000002a4300000243
00000c439a99193fff0000800000909400000002000034430000f0429a99993e
0000ff8060815fa0000000800000d84200008c420000be42000020423333333f
ffff00ff000080200000964300008043ffffff80000090806666663f040e018c
0000d442000082420000c2420000344200004d43000091430000394300008743
14805fa0186c5fa080841e0000e100ac7856341200e000ac2200008000e1000c
0c0100220000006514e000ac0001dec0046c5fa000e0000c63d2226101711222
83603c88028f4288a9a00900048ffb5ee82e018ba8a009005cd10b4109005cd1
0b4110e45bd1126283639c73aa911633028ff951c6a009002831fc5e163e008b
1c1ffd5e123e00891d1ffe5e1c3eee1f291f00e148e0fe022822038d18210189
22a10900028d3fe112a1fd521638018bc2a08360017883603c88028f3ce1cda8
09001638018bb4a846881e88028f2d88baa80900028f0f88bba8090001899fa1
83603dd10b4101e4836208422c3208428c32184209428c326591192283603fc9
036108410c31184134d33c3134d321211043fc8f0271a1aa090032d1222100e1
31d210220c720ae33022047210222fd1a0e220212ed22fd1206008c8018f1041
fa8b2bd1106008c8238d13e26871212100e221210ae3312121212121212124d2
24d1206008c8018f1041fa8b20d1106008c81189687111621160116211621161
1ad220620fc918401c610b211ad257af12221ad1faaf090018d1f7af090018d0
0b4000e404a00b1f15d00b4001e40b1f06d10b41090006d10b4110e405d11262
67af291f9500ff7f1080018c0c06018c4c06018c0c00d8ffe405018c000000a5
00a000000880018c84705fa09c705fa018705fa0a08601000480018cffff0000
a007018caa9110381f8ff55ee82e1c8956d1a493322156d1ec31291f55d21222
55d112611821078d8360226253d11032038f01c8c2a00ae201c8018be1a00900
4fd150d2122236af017887911038b78fce71fd53fc5ee8331633268dfe5e4ad3
ec337d911633268d44e0fe000820278df65e3ed175933221291ffe5e42d2ec32
6e9116325e8d44e0fe0008205d8ff65ee82e5d8f48e0fe0008205c8fff5ee82e
278df85039d1b9afec3130d15a93322137d1b3af291f2dd155933221ddaf291f
e82e0e8d58e029d1fe000221291ffd52fc5ee832449116322dd19f8dfe5ecdaf
0900291fd6ae01e120d13d922221efaffd520820038df75e26d18faf0c31e82e
028925d18aafec31fa5ee82e028923d184afec31fb5ee82e038d40e020d17daf
ec3101e1fe021732038f40e01dd175af2c31fe000188028910d16faf09001ad1
6caf090019d169af090019d166af090018d163af090018d160af0900fa00e003
c8001f7c007cff03007e090010905fa00001d0ba4840018c1080018c0d600d60
0000400050805fa043c721fe0008d0ba0200d0ba0009d0ba000ad0ba000bd0ba
000dd0ba0007d0ba4d4d0d600300d0ba0400d0ba0500d0ba0600d0ba5bd11261
c971263112895ad112611821138959d11262a9911032028957d108a0090057d1
126118210a8956d101a0090055d156d2122221af836055d1f9af090054d1f6af
090054d11daf090029071ce61821028d6d47d3ab090050d050dc51d69fab0900
03c9038801890fa93fe13fe11638028d83605aae836201c8018b3fa9090049d1
019c230c0900d4ee47d222621071203102ee068fe71f45d11261503102ee048d
e71f01922302090058ea01912301090096ea3360038829071ce11d473cd038d1
36dc6cab1366f48f182139d091ab09004121017002715630058f20c8d62f019d
230df66d8eecf38f2364f1af336401a093628362212101700271a630f78f0388
f78d46302c8f66302c8b312101705888f38f027127d12892222127d227d12921
27d33b2113662367e07726d518e352271043fc8f047724d30ce77223fc7310e7
722322d708e3722101771043fb8f047183061ed700e101e60195230508e350df
c8af5362c6af7362280680000c80018c0880018c0480018c030cd0ba0080018c
040cd0ba010cd0ba4840018c020cd0ba9d5a0d60000020000000484300006c43
0000803f000040001000a0ff1400a0ff000070431c815fa0e040018ce0ffff03
000000e0111111113c0000ffe0ffc00040000000640000000000000040010000
0e00000000000000100000000a00000000000000010004000000040003000400
01000c0001002400010004000100000002000000000100000002000003030000
00017f80ff000000000000000100000002000000ffffff7f0000008001000080
ffffffff78563412efbeadde000001005345474120534547414b4154414e4120
000000000000000017b7d1380000000000000000ffffffff0000204400000000
17b7d1380000803f00000000ffffffff000000000000f04317b7d13800000000
0000803fffffffff00000010
""")
SYNC = b'\x00' + b'\xff' * 10 + b'\x00'
BASE = 45000 # LBA of the high-density data track
ROOT = BASE + 20 # root directory
FILE = BASE + 21 # 1ST_READ.BIN
# The audio track: 300 sectors of 588 stereo samples.
AUDIO_SECTORS = 300
def cdda_frame(n):
"""Sample @n of the audio track, left and right. Two sawtooth-like
sequences that never line up with each other, so that a run of samples
says where in the track it is from, and a dropped, repeated or
byte-swapped sector shows."""
return ((n * 37) % 20001 - 10000, (n * 53 + 7) % 19997 - 9998)
# The sound the program puts in the sound chip's memory for a channel to
# play: this many samples of 16-bit PCM, looping.
CHANNEL_SAMPLES = 256
def channel_sample(k):
"""Sample @k of the channel's loop, as live_prog.c writes it."""
return (k * 97) % 4001 - 2000
# ...and for a second channel, which plays it through its low-pass filter:
# this many samples, a square wave and then silence, with the filter's
# cutoff and resonance registers set to these.
FILTER_SAMPLES = 4096
FILTER_CUTOFF = 0x1900
FILTER_Q = 8
def filter_sample(k):
"""Sample @k of the filtered channel's loop, as live_prog.c writes it."""
return 0 if k >= 2048 else -6000 if k & 32 else 6000
# ...and for a third, played an octave down: this many samples.
PITCH_SAMPLES = 4096
def pitch_sample(k):
"""Sample @k of the pitched channel's loop, as live_prog.c writes it."""
return ((k % PITCH_SAMPLES) * 131) % 1999 - 999
def bcd(v):
return ((v // 10) << 4) | (v % 10)
def raw_sector(lba, data):
"""One MODE1/2352 sector; the core does not check EDC/ECC."""
fad = lba + 150
hdr = bytes((bcd(fad // 4500), bcd((fad // 75) % 60), bcd(fad % 75), 1))
return SYNC + hdr + data.ljust(2048, b'\0') + bytes(2352 - 16 - 2048)
def both32(v):
return struct.pack('<I', v) + struct.pack('>I', v)
def dirent(name, lba, size, flags):
ln = 33 + len(name) + ((len(name) + 1) & 1)
rec = (bytes((ln, 0)) + both32(lba) + both32(size) + bytes(7)
+ bytes((flags, 0, 0)) + struct.pack('<H', 1) + struct.pack('>H', 1)
+ bytes((len(name),)) + name)
return rec.ljust(ln, b'\0')
def write_elf(out):
"""The program on its own, as the ELF file a Dreamcast program is built
as: one loadable segment at 0x8C010000, where it also starts, with a
page of zeroes asked for after it."""
base, offset = 0x8C010000, 0x100
header = struct.pack('<4s5B7xHHIIIIIHHHHHH',
b'\x7fELF', 1, 1, 1, 0, 0, # 32-bit, little-endian
2, 42, 1, # executable, SuperH
base, 52, 0, 0, # entry, program headers
52, 32, 1, 40, 0, 0)
segment = struct.pack('<8I', 1, offset, base, base,
len(PROGRAM), len(PROGRAM) + 4096, 5, 4)
with open(out, 'wb') as f:
f.write((header + segment).ljust(offset, b'\0') + PROGRAM)
def card_block(path, block):
"""The first quarter of a block of the memory card file at path."""
with open(path, 'rb') as f:
f.seek(block * 512)
return f.read(128)
def card_written(path, marked=False):
"""Whether the memory card file at path has what live_prog.c writes to
the card: 32 words from 0xC0DE0000 up in the first quarter of block
100, at the start, and 32 from 0xC0DE0100 up in block 101, in its
150th frame. And, if marked, what card_mark() puts in block 50."""
ok = True
want = [(100, struct.pack('<32I', *[0xC0DE0000 + i for i in range(32)])),
(101, struct.pack('<32I', *[0xC0DE0100 + i for i in range(32)]))]
if marked:
want.append((50, CARD_MARK))
for block, words in want:
try:
got = card_block(path, block)
except OSError as e:
sys.stderr.write('%s\n' % e)
return False
if got != words:
sys.stderr.write('block %d of %s begins %s\n' % (block, path, got[:16].hex()))
ok = False
return ok
CARD_MARK = struct.pack('<32I', *[0xCA4D0000 + i for i in range(32)])
def card_mark(path):
"""Put something of its own in block 50 of the memory card file at
path, which the program never writes: a card that is not the one a
run starts with."""
with open(path, 'r+b') as f:
f.seek(50 * 512)
f.write(CARD_MARK)
def main():
if sys.argv[1:] == ['--verdict']:
print('0x%08x' % LIVE_VERDICT)
return 0
if len(sys.argv) == 3 and sys.argv[1] == '--card':
return 0 if card_written(sys.argv[2]) else 1
if len(sys.argv) == 3 and sys.argv[1] == '--card-mark':
card_mark(sys.argv[2])
return 0
if len(sys.argv) == 3 and sys.argv[1] == '--card-marked':
return 0 if card_written(sys.argv[2], True) else 1
if len(sys.argv) == 2 and sys.argv[1].endswith('.elf'):
write_elf(sys.argv[1])
return 0
if len(sys.argv) not in (2, 3) or sys.argv[2:] not in ([], ['--no-region-array'], ['--mmu-align'], ['--slant'], ['--hscale'], ['--cull'], ['--atlas'], ['--dma'], ['--clip'], ['--keep'], ['--heavy']):
sys.stderr.write(__doc__)
return 2
out = sys.argv[1]
program = PROGRAM
if sys.argv[2:] == ['--no-region-array']:
program = PROGRAM_NO_REGION_ARRAY
elif sys.argv[2:] == ['--mmu-align']:
program = PROGRAM_MMU_ALIGN
elif sys.argv[2:] == ['--slant']:
program = PROGRAM_SLANT
elif sys.argv[2:] == ['--hscale']:
program = PROGRAM_HSCALE
elif sys.argv[2:] == ['--cull']:
program = PROGRAM_CULL
elif sys.argv[2:] == ['--atlas']:
program = PROGRAM_ATLAS
elif sys.argv[2:] == ['--dma']:
program = PROGRAM_DMA
elif sys.argv[2:] == ['--clip']:
program = PROGRAM_CLIP
elif sys.argv[2:] == ['--keep']:
program = PROGRAM_KEEP
elif sys.argv[2:] == ['--heavy']:
program = PROGRAM_HEAVY
d = os.path.dirname(out) or '.'
ip = bytearray(16 * 2048)
meta = (b'SEGA SEGAKATANA ' + b'SEGA ENTERPRISES' + b'0000 ' + b'GD-ROM'
+ b'1/1 ' + b'JUE ' + b'E000' + b'F' + b'1' + b'0' + b' '
+ b'T-00000 ' + b'V1.000' + b'20260101' + b' '
+ b'1ST_READ.BIN ' + b'FLYCAST TEST '
+ b'THREADS TEST'.ljust(128))
ip[0:len(meta)] = meta
# Bootstrap at 0x300: mov.l @(4,pc),r0; jmp @r0; nop; nop; .long 0x8c010000
ip[0x300:0x30c] = (bytes((0x01, 0xd0, 0x2b, 0x40, 0x09, 0x00, 0x09, 0x00))
+ struct.pack('<I', 0x8c010000))
pvd = bytearray(2048)
pvd[0] = 1
pvd[1:6] = b'CD001'
pvd[6] = 1
pvd[156:156 + 34] = dirent(b'\0', ROOT, 2048, 2)
root = (dirent(b'\0', ROOT, 2048, 2) + dirent(b'\x01', ROOT, 2048, 2)
+ dirent(b'1ST_READ.BIN;1', FILE, len(program), 0))
sectors = {}
for i in range(16):
sectors[BASE + i] = bytes(ip[i * 2048:(i + 1) * 2048])
sectors[BASE + 16] = bytes(pvd)
sectors[ROOT] = root
for i in range((len(program) + 2047) // 2048):
sectors[FILE + i] = program[i * 2048:(i + 1) * 2048]
with open(os.path.join(d, 'track01.bin'), 'wb') as f:
for lba in range(300):
f.write(raw_sector(lba, b''))
with open(os.path.join(d, 'track02.raw'), 'wb') as f:
f.write(b''.join(struct.pack('<hh', *cdda_frame(n))
for n in range(588 * AUDIO_SECTORS)))
with open(os.path.join(d, 'track03.bin'), 'wb') as f:
for lba in range(BASE, BASE + 600):
f.write(raw_sector(lba, sectors.get(lba, b'')))
with open(out, 'w') as f:
f.write('3\n1 0 4 2352 track01.bin 0\n2 450 0 2352 track02.raw 0\n'
'3 %d 4 2352 track03.bin 0\n' % BASE)
return 0
if __name__ == '__main__':
sys.exit(main())